From 1b55de018bd3977943fa85c2feb02a82de554ac3 Mon Sep 17 00:00:00 2001 From: Adam Zakrzewski <122363592+azakrzewski-hy@users.noreply.github.com> Date: Wed, 29 Nov 2023 19:09:07 +0100 Subject: [PATCH] [ACS-5018] library actions protractor tests (#3545) * [ACS-5018] library actions protractor tests * updating type and timeout * implementing reviews comments --- .github/workflows/pull-request.yml | 4 +- .../src/tests/library/library-actions.spec.ts | 442 ++++++++++++++++++ .../actions/library/library-actions.test.ts | 429 ----------------- .../src/api/sites-api.ts | 34 +- .../src/fixtures/page-initialization.ts | 7 +- .../dialogs/adf-confirm-dialog.component.ts | 39 ++ .../page-objects/components/dialogs/index.ts | 1 + .../pages/favorites-libraries.page.ts | 3 +- .../page-objects/pages/my-libraries.page.ts | 4 +- .../src/page-objects/pages/search.page.ts | 3 +- .../src/components/dialog/confirm-dialog.ts | 5 - .../src/components/toolbar/toolbar.ts | 2 - 12 files changed, 529 insertions(+), 444 deletions(-) create mode 100644 e2e/playwright/actions/src/tests/library/library-actions.spec.ts delete mode 100755 e2e/protractor/suites/actions/library/library-actions.test.ts create mode 100644 projects/aca-playwright-shared/src/page-objects/components/dialogs/adf-confirm-dialog.component.ts diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index a61fcc606..291465065 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -125,10 +125,8 @@ jobs: id: 7 - name: "editActions,favoriteActions" id: 8 - - name: "libraryActions" - id: 9 - name: "uploadDownloadActions" - id: 10 + id: 9 steps: - name: Checkout uses: actions/checkout@v3 diff --git a/e2e/playwright/actions/src/tests/library/library-actions.spec.ts b/e2e/playwright/actions/src/tests/library/library-actions.spec.ts new file mode 100644 index 000000000..a95ee341b --- /dev/null +++ b/e2e/playwright/actions/src/tests/library/library-actions.spec.ts @@ -0,0 +1,442 @@ +/*! + * 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 { expect } from '@playwright/test'; +import { + Utils, + ApiClientFactory, + test, + SitesApi, + FavoritesPageApi, + timeouts, + DataTableComponent, + SnackBarComponent, + AdfConfirmDialogComponent, + AcaHeader, + MatMenuComponent, + TrashcanApi +} from '@alfresco/playwright-shared'; +import { Site } from '@alfresco/js-api'; + +test.describe('Library actions ', () => { + const notMemberString = 'Not a member'; + const managerRole = 'Manager'; + const contributorRole = 'Contributor'; + const consumerRole = 'Consumer'; + const joinButton = 'Join'; + const libraryJoinedMessage = 'Library joined'; + const requestToJoinMessage = 'Request sent to join this library'; + const cancelJoinRequestButton = 'Cancel Join Request'; + const cancelJoinRequestMessage = 'Canceled the request to join the library'; + const leaveLibraryButton = 'Leave Library'; + const leftMessage = 'You have left the library'; + const favoriteButton = 'Favorite'; + const removeFavoriteButton = 'Remove Favorite'; + const deleteButton = 'Delete'; + const libraryDeletedMessage = 'Library deleted'; + const siteString = 'site'; + const loadString = 'load'; + const domContentLoadedString = 'domcontentloaded'; + + const username2 = `user-${Utils.random()}`; + const adminLibrary1 = `playwright-A-library-${Utils.random()}`; + const adminLibrary2 = `playwright-A-library-${Utils.random()}`; + const adminLibrary3 = `playwright-A-library-${Utils.random()}`; + const adminLibrary4 = `playwright-A-library-${Utils.random()}`; + const adminModerateLibrary1 = `playwright-Am-library-${Utils.random()}`; + const adminModerateLibrary2 = `playwright-Am-library-${Utils.random()}`; + const adminModerateLibrary3 = `playwright-Am-library-${Utils.random()}`; + const adminModerateLibrary4 = `playwright-Am-library-${Utils.random()}`; + const user1Library1 = `playwright-U1-library-${Utils.random()}`; + const user1Library2 = `playwright-U1-library-${Utils.random()}`; + const user1Library3 = `playwright-U1-library-${Utils.random()}`; + const user1Library4 = `playwright-U1-library-${Utils.random()}`; + const user1Library5 = `playwright-U1-library-${Utils.random()}`; + const user2Library1 = `playwright-U2-library-${Utils.random()}`; + const user2Library2 = `playwright-U2-library-${Utils.random()}`; + const user2Library3 = `playwright-U2-library-${Utils.random()}`; + const user2Library4 = `playwright-U2-library-${Utils.random()}`; + const user2Library5Delete = `playwright-T-library-${Utils.random()}`; + const user2Library6Delete = `playwright-T-library-${Utils.random()}`; + const user2Library7Delete = `playwright-T-library-${Utils.random()}`; + + const adminLibraryIds = [adminLibrary1, adminLibrary2, adminLibrary3, adminLibrary4]; + const adminModerateLibraryIds = [adminModerateLibrary1, adminModerateLibrary2, adminModerateLibrary3, adminModerateLibrary4]; + const user1LibraryIds = [user1Library1, user1Library2, user1Library3, user1Library4, user1Library5]; + const user2LibraryIds = [user2Library1, user2Library2, user2Library3, user2Library4]; + + let adminSitesApi: SitesApi; + let user2SitesApi: SitesApi; + + test.beforeAll(async () => { + test.setTimeout(timeouts.extendedTest); + const apiClientFactory = new ApiClientFactory(); + const username1 = `user-${Utils.random()}`; + const siteRoles = [ + Site.RoleEnum.SiteManager, + Site.RoleEnum.SiteContributor, + Site.RoleEnum.SiteCollaborator, + Site.RoleEnum.SiteConsumer, + Site.RoleEnum.SiteManager + ]; + const user2LibraryIdsDelete = [user2Library5Delete, user2Library6Delete, user2Library7Delete]; + try { + await apiClientFactory.setUpAcaBackend('admin'); + await apiClientFactory.createUser({ username: username1 }); + await apiClientFactory.createUser({ username: username2 }); + + adminSitesApi = await SitesApi.initialize('admin'); + for (const libraryId of adminLibraryIds) { + await adminSitesApi.createSite(libraryId); + } + + for (const libraryId of adminModerateLibraryIds) { + await adminSitesApi.createSite(libraryId, Site.VisibilityEnum.MODERATED); + } + await adminSitesApi.addSiteMember(adminLibrary3, username2, Site.RoleEnum.SiteContributor); + + const user1SitesApi = await SitesApi.initialize(username1, username1); + for (let i = 0; i < user1LibraryIds.length; i++) { + await user1SitesApi.createSite(user1LibraryIds[i]); + await user1SitesApi.addSiteMember(user1LibraryIds[i], username2, siteRoles[i]); + } + + user2SitesApi = await SitesApi.initialize(username2, username2); + for (const libraryId of user2LibraryIds) { + await user2SitesApi.createSite(libraryId); + } + + for (const libraryId of user2LibraryIdsDelete) { + await user2SitesApi.createSite(libraryId); + } + + await new Promise((resolve) => setTimeout(resolve, timeouts.extraLarge)); + } catch (error) { + console.error(`Main beforeAll failed : ${error}`); + } + }); + + test.beforeEach(async ({ loginPage, myLibrariesPage }) => { + try { + await loginPage.loginUser( + { username: username2, password: username2 }, + { + withNavigation: true, + waitForLoading: true + } + ); + await myLibrariesPage.navigate(); + } catch (error) { + console.error(`Main beforeEach failed : ${error}`); + } + }); + + test.afterAll(async () => { + try { + await adminSitesApi.deleteSites(adminLibraryIds); + await adminSitesApi.deleteSites(adminModerateLibraryIds); + await adminSitesApi.deleteSites(user1LibraryIds); + await adminSitesApi.deleteSites(user2LibraryIds); + const trashcanApi = await TrashcanApi.initialize(username2, username2); + await trashcanApi.emptyTrashcan(); + } catch (error) { + console.error(`Main afterAll failed : ${error}`); + } + }); + + test.describe('My Libraries page', () => { + let libraryTable: DataTableComponent; + let snackBar: SnackBarComponent; + let confirmDialog: AdfConfirmDialogComponent; + let myLibrariesHeader: AcaHeader; + let libraryMenu: MatMenuComponent; + + test.beforeEach(async ({ myLibrariesPage }) => { + try { + libraryTable = myLibrariesPage.dataTable; + snackBar = myLibrariesPage.snackBar; + confirmDialog = myLibrariesPage.confirmDialogComponent; + myLibrariesHeader = myLibrariesPage.acaHeader; + libraryMenu = myLibrariesPage.matMenu; + } catch (error) { + console.error(`My Libraries, beforeEach failed : ${error}`); + } + }); + + test('[C290106] Leave a library from My Libraries', async () => { + await expect(libraryTable.getCellByColumnNameAndRowItem(user1Library1, managerRole)).toBeVisible(); + await libraryTable.performActionFromExpandableMenu(user1Library1, leaveLibraryButton); + await expect.soft(confirmDialog.getDialogTitle('Leave this library?')).toBeVisible(); + await expect.soft(confirmDialog.getDialogContent('Leaving will remove your access.')).toBeVisible(); + await expect.soft(confirmDialog.okButton).toBeVisible(); + await expect.soft(confirmDialog.cancelButton).toBeVisible(); + await confirmDialog.okButton.click(); + await expect.soft(snackBar.getByMessageLocator(leftMessage)).toBeVisible(); + await expect(libraryTable.getRowByName(user1Library1)).not.toBeVisible(); + }); + + test('[C290111] Cancel Leave Library', async () => { + await expect(libraryTable.getCellByColumnNameAndRowItem(user1Library5, managerRole)).toBeVisible(); + await libraryTable.performActionFromExpandableMenu(user1Library5, leaveLibraryButton); + await confirmDialog.cancelButton.click(); + await expect(libraryTable.getCellByColumnNameAndRowItem(user1Library5, managerRole)).toBeVisible(); + }); + + test('[C290107] Leave a library - failure notification', async () => { + await expect(libraryTable.getCellByColumnNameAndRowItem(user2Library1, managerRole)).toBeVisible(); + await libraryTable.performActionFromExpandableMenu(user2Library1, leaveLibraryButton); + await confirmDialog.okButton.click(); + await expect.soft(snackBar.getByMessageLocator('Cannot leave this library')).toBeVisible(); + await expect(libraryTable.getCellByColumnNameAndRowItem(user2Library1, managerRole)).toBeVisible(); + }); + + test('[C289974] Mark library as favorite from My Libraries', async () => { + await expect(libraryTable.getCellByColumnNameAndRowItem(adminLibrary3, contributorRole)).toBeVisible(); + await libraryTable.getCellByColumnNameAndRowItem(adminLibrary3, contributorRole).click(); + await myLibrariesHeader.clickMoreActions(); + await libraryMenu.clickMenuItem(favoriteButton); + await myLibrariesHeader.clickMoreActions(); + expect(await libraryMenu.isMenuItemVisible(removeFavoriteButton)).toBe(true); + }); + + test('[C289975] Remove library from favorites from My Libraries', async ({ myLibrariesPage }) => { + await myLibrariesPage.reload({ waitUntil: domContentLoadedString }); + await expect(libraryTable.getRowByName(user2Library2)).toBeVisible(); + await libraryTable.getRowByName(user2Library2).click(); + await myLibrariesHeader.clickMoreActions(); + expect(await libraryMenu.isMenuItemVisible(removeFavoriteButton)).toBe(true); + await libraryMenu.clickMenuItem(removeFavoriteButton); + await myLibrariesHeader.clickMoreActions(); + expect(await libraryMenu.isMenuItemVisible(favoriteButton)).toBe(true); + }); + + test('[C289988] Delete a library from My Libraries', async ({ trashPage }) => { + const trashTable = trashPage.dataTable; + + await expect(libraryTable.getRowByName(user2Library5Delete)).toBeVisible(); + await libraryTable.getRowByName(user2Library5Delete).click(); + await myLibrariesHeader.clickMoreActions(); + await libraryMenu.clickMenuItem(deleteButton); + await expect.soft(snackBar.getByMessageLocator(libraryDeletedMessage)).toBeVisible(); + await expect(libraryTable.getRowByName(user2Library5Delete)).not.toBeVisible(); + await trashPage.navigate({ waitUntil: loadString }); + await expect(trashTable.getRowByName(user2Library5Delete)).toBeVisible(); + }); + }); + + test.describe('Favorite Libraries page', () => { + let libraryTable: DataTableComponent; + let snackBar: SnackBarComponent; + let favoritesApi: FavoritesPageApi; + + test.beforeEach(async ({ favoriteLibrariesPage }) => { + try { + libraryTable = favoriteLibrariesPage.dataTable; + snackBar = favoriteLibrariesPage.snackBar; + favoritesApi = await FavoritesPageApi.initialize(username2, username2); + } catch (error) { + console.error(`beforeAll failed : ${error}`); + } + }); + + test('[C290105] Join a public library from Favorite Libraries', async ({ favoriteLibrariesPage }) => { + await favoritesApi.addFavoriteById(siteString, adminLibrary1); + await favoriteLibrariesPage.navigate(); + await libraryTable.performActionFromExpandableMenu(adminLibrary1, joinButton); + await expect.soft(snackBar.getByMessageLocator(libraryJoinedMessage)).toBeVisible(); + await expect(libraryTable.getCellByColumnNameAndRowItem(adminLibrary1, consumerRole)).toBeVisible(); + }); + + test('[C290109] Join a moderated library from Favorite Libraries', async ({ favoriteLibrariesPage }) => { + await favoritesApi.addFavoriteById(siteString, adminModerateLibrary1); + await favoriteLibrariesPage.navigate(); + await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary1, notMemberString)).toBeVisible(); + await libraryTable.performActionFromExpandableMenu(adminModerateLibrary1, joinButton); + await expect.soft(snackBar.getByMessageLocator(requestToJoinMessage)).toBeVisible(); + await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary1, notMemberString)).toBeVisible(); + await adminSitesApi.approveSiteMembershipRequest(adminModerateLibrary1, username2); + await favoriteLibrariesPage.navigate(); + await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary1, consumerRole)).toBeVisible(); + }); + + test('[C290110] Leave a library from Favorite Libraries', async ({ favoriteLibrariesPage }) => { + const confirmDialog = favoriteLibrariesPage.confirmDialogComponent; + await favoritesApi.addFavoriteById(siteString, user1Library2); + await favoriteLibrariesPage.navigate(); + await expect(libraryTable.getCellByColumnNameAndRowItem(user1Library2, contributorRole)).toBeVisible(); + await libraryTable.performActionFromExpandableMenu(user1Library2, leaveLibraryButton); + await confirmDialog.okButton.click(); + await expect.soft(snackBar.getByMessageLocator(leftMessage)).toBeVisible(); + await expect(libraryTable.getCellByColumnNameAndRowItem(user1Library2, notMemberString)).toBeVisible(); + }); + + test('[C290108] Cancel join from Favorite Libraries', async ({ favoriteLibrariesPage }) => { + await user2SitesApi.createSiteMembershipRequestForPerson(username2, adminModerateLibrary3); + await favoritesApi.addFavoriteById(siteString, adminModerateLibrary3); + await favoriteLibrariesPage.navigate(); + + await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary3, notMemberString)).toBeVisible(); + await libraryTable.performActionFromExpandableMenu(adminModerateLibrary3, cancelJoinRequestButton); + await expect.soft(snackBar.getByMessageLocator(cancelJoinRequestMessage)).toBeVisible(); + const hasJoinRequest = await user2SitesApi.hasMembershipRequest(username2, adminModerateLibrary3); + expect(hasJoinRequest).toBe(false); + }); + + test('[C289976] Remove library from favorites from Favorite Libraries', async ({ favoriteLibrariesPage }) => { + const myLibrariesHeader = favoriteLibrariesPage.acaHeader; + const libraryMenu = favoriteLibrariesPage.matMenu; + + await favoriteLibrariesPage.navigate({ waitUntil: domContentLoadedString }); + await expect(libraryTable.getRowByName(user2Library3)).toBeVisible(); + await libraryTable.getRowByName(user2Library3).click(); + await myLibrariesHeader.clickMoreActions(); + await libraryMenu.clickMenuItem(removeFavoriteButton); + await expect(libraryTable.getRowByName(user2Library3)).not.toBeVisible(); + }); + + test('[C289991] Delete a library from Favorite Libraries', async ({ favoriteLibrariesPage, trashPage }) => { + const myLibrariesHeader = favoriteLibrariesPage.acaHeader; + const libraryMenu = favoriteLibrariesPage.matMenu; + const trashTable = trashPage.dataTable; + + await favoriteLibrariesPage.navigate(); + await expect(libraryTable.getRowByName(user2Library6Delete)).toBeVisible(); + await libraryTable.getRowByName(user2Library6Delete).click(); + await myLibrariesHeader.clickMoreActions(); + await libraryMenu.clickMenuItem(deleteButton); + await expect.soft(snackBar.getByMessageLocator(libraryDeletedMessage)).toBeVisible(); + await expect(libraryTable.getRowByName(user2Library6Delete)).not.toBeVisible(); + await trashPage.navigate({ waitUntil: loadString }); + await expect(trashTable.getRowByName(user2Library6Delete)).toBeVisible(); + }); + }); + + test.describe('Search Page', () => { + let libraryTable: DataTableComponent; + let snackBar: SnackBarComponent; + + test.beforeEach(async ({ searchPage }) => { + try { + libraryTable = searchPage.dataTable; + snackBar = searchPage.snackBar; + } catch (error) { + console.error(`Search Page, beforeEach failed : ${error}`); + } + }); + + test('[C306959] Join a public library from Search Results', async ({ searchPage }) => { + await searchPage.navigate({ remoteUrl: `#/search-libraries;q=${adminLibrary2}` }); + await searchPage.reload({ waitUntil: loadString }); + await expect(libraryTable.getCellByColumnNameAndRowItem(adminLibrary2, notMemberString)).toBeVisible(); + await libraryTable.performActionFromExpandableMenu(adminLibrary2, joinButton); + await expect.soft(snackBar.getByMessageLocator(libraryJoinedMessage)).toBeVisible(); + await expect(libraryTable.getCellByColumnNameAndRowItem(adminLibrary2, consumerRole)).toBeVisible(); + }); + + test('[C306960] Join a moderated library from Search Results', async ({ myLibrariesPage, searchPage }) => { + await searchPage.navigate({ remoteUrl: `#/search-libraries;q=${adminModerateLibrary2}` }); + await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary2, notMemberString)).toBeVisible(); + await libraryTable.performActionFromExpandableMenu(adminModerateLibrary2, joinButton); + await expect.soft(snackBar.getByMessageLocator(requestToJoinMessage)).toBeVisible(); + await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary2, notMemberString)).toBeVisible(); + await adminSitesApi.approveSiteMembershipRequest(adminModerateLibrary2, username2); + await myLibrariesPage.navigate(); + await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary2, consumerRole)).toBeVisible(); + }); + + test('[C306961] Leave a library from Search Results', async ({ searchPage }) => { + const confirmDialog = searchPage.confirmDialogComponent; + await searchPage.navigate({ remoteUrl: `#/search-libraries;q=${user1Library3}` }); + + await expect(libraryTable.getCellByColumnNameAndRowItem(user1Library3, 'Collaborator')).toBeVisible(); + await libraryTable.performActionFromExpandableMenu(user1Library3, leaveLibraryButton); + await confirmDialog.okButton.click(); + await expect.soft(snackBar.getByMessageLocator(leftMessage)).toBeVisible(); + await expect(libraryTable.getCellByColumnNameAndRowItem(user1Library3, notMemberString)).toBeVisible(); + }); + + test('[C306962] Cancel join from Search Results', async ({ searchPage }) => { + await user2SitesApi.createSiteMembershipRequestForPerson(username2, adminModerateLibrary4); + await searchPage.navigate({ remoteUrl: `#/search-libraries;q=${adminModerateLibrary4}` }); + await searchPage.reload({ waitUntil: loadString }); + await expect(libraryTable.getCellByColumnNameAndRowItem(adminModerateLibrary4, notMemberString)).toBeVisible(); + await libraryTable.performActionFromExpandableMenu(adminModerateLibrary4, cancelJoinRequestButton); + await expect.soft(snackBar.getByMessageLocator(cancelJoinRequestMessage)).toBeVisible(); + const hasJoinRequest = await user2SitesApi.hasMembershipRequest(username2, adminModerateLibrary4); + expect(hasJoinRequest).toBe(false); + }); + + test('[C306963] Mark library as favorite from Search Results', async ({ myLibrariesPage, searchPage }) => { + const myLibrariesHeader = myLibrariesPage.acaHeader; + const libraryMenu = myLibrariesPage.matMenu; + + await myLibrariesHeader.searchButton.click(); + await searchPage.searchInput.searchButton.click(); + await searchPage.searchOverlay.searchLibrariesOption.click(); + await searchPage.searchOverlay.searchFor(adminLibrary4); + + await expect(libraryTable.getRowByName(adminLibrary4)).toBeVisible(); + await libraryTable.getRowByName(adminLibrary4).click(); + await myLibrariesHeader.clickMoreActions(); + await libraryMenu.clickMenuItem(favoriteButton); + await myLibrariesHeader.clickMoreActions(); + expect(await libraryMenu.isMenuItemVisible(removeFavoriteButton)).toBe(true); + }); + + test('[C306964] Remove library from favorites from Search Results', async ({ searchPage }) => { + const searchHeader = searchPage.acaHeader; + const libraryMenu = searchPage.matMenu; + + await searchHeader.searchButton.click(); + await searchPage.searchInput.searchButton.click(); + await searchPage.searchOverlay.searchLibrariesOption.click(); + await searchPage.searchOverlay.searchFor(user2Library4); + + await expect(libraryTable.getRowByName(user2Library4)).toBeVisible(); + await searchPage.reload({ waitUntil: domContentLoadedString }); + await libraryTable.getRowByName(user2Library4).click(); + await searchHeader.clickMoreActions(); + await libraryMenu.clickMenuItem(removeFavoriteButton); + await searchHeader.clickMoreActions(); + expect(await libraryMenu.isMenuItemVisible(favoriteButton)).toBe(true); + }); + + test('[C306965] Delete a library from Search Results', async ({ searchPage, trashPage }) => { + const searchHeader = searchPage.acaHeader; + const libraryMenu = searchPage.matMenu; + const trashTable = trashPage.dataTable; + + await searchPage.navigate({ remoteUrl: `#/search-libraries;q=${user2Library7Delete}` }); + await searchPage.reload({ waitUntil: loadString }); + await expect(libraryTable.getRowByName(user2Library7Delete)).toBeVisible(); + await libraryTable.getRowByName(user2Library7Delete).click(); + await searchHeader.clickMoreActions(); + await libraryMenu.clickMenuItem(deleteButton); + await expect.soft(snackBar.getByMessageLocator(libraryDeletedMessage)).toBeVisible(); + await expect(libraryTable.getRowByName(user2Library7Delete)).not.toBeVisible(); + await trashPage.navigate({ waitUntil: loadString }); + await expect(trashTable.getRowByName(user2Library7Delete)).toBeVisible(); + }); + }); +}); diff --git a/e2e/protractor/suites/actions/library/library-actions.test.ts b/e2e/protractor/suites/actions/library/library-actions.test.ts deleted file mode 100755 index 588b18afa..000000000 --- a/e2e/protractor/suites/actions/library/library-actions.test.ts +++ /dev/null @@ -1,429 +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 { AdminActions, SITE_VISIBILITY, SITE_ROLES, LoginPage, BrowsingPage, Utils, ConfirmDialog, RepoClient } from '@alfresco/aca-testing-shared'; -import { BrowserActions } from '@alfresco/adf-testing'; - -describe('Library actions', () => { - const username = `user-${Utils.random()}`; - - const sitePublic1Admin = `admin-public1-${Utils.random()}`; - const sitePublic2Admin = `admin-public2-${Utils.random()}`; - const sitePublic3Admin = `admin-public3-${Utils.random()}`; - const sitePublic4Admin = `admin-public4-${Utils.random()}`; - const sitePublic5Admin = `admin-public5-${Utils.random()}`; - const sitePublic6Admin = `admin-public6-${Utils.random()}`; - const sitePublic7Admin = `admin-public7-${Utils.random()}`; - const sitePublic8Admin = `admin-public8-${Utils.random()}`; - - const sitePublicUser = `user-public1-${Utils.random()}`; - const siteForDelete1 = `user-public2-${Utils.random()}`; - const siteForDelete2 = `user-public3-${Utils.random()}`; - - const siteModerated1Admin = `admin-moderated1-${Utils.random()}`; - const siteModerated2Admin = `admin-moderated2-${Utils.random()}`; - - const siteSearchModerated1Admin = `site-moderated-search-1-${Utils.random()}`; - const siteSearchModerated2Admin = `site-moderated-search-2-${Utils.random()}`; - - const siteSearchPublic1Admin = `site-public-search-1-${Utils.random()}`; - const siteSearchPublic2Admin = `site-public-search-2-${Utils.random()}`; - const siteSearchPublic3Admin = `site-public-search-3-${Utils.random()}`; - const siteSearchPublic4Admin = `site-public-search-4-${Utils.random()}`; - const siteSearchForDelete = `site-public-search-5-${Utils.random()}`; - - const apis = { - user: new RepoClient(username, username) - }; - - const loginPage = new LoginPage(); - const page = new BrowsingPage(); - const { dataTable, toolbar } = page; - const { searchInput } = page.pageLayoutHeader; - - const confirmDialog = new ConfirmDialog(); - const adminApiActions = new AdminActions(); - - const publicAdminSites = [siteSearchPublic1Admin, siteSearchPublic2Admin, siteSearchPublic3Admin, siteSearchPublic4Admin]; - const moderatedSites = [siteSearchModerated1Admin, siteSearchModerated2Admin]; - - beforeAll(async () => { - await adminApiActions.createUser({ username }); - - await adminApiActions.sites.createSites(publicAdminSites); - await adminApiActions.sites.createSites(moderatedSites, SITE_VISIBILITY.MODERATED); - - await loginPage.loginWith(username); - }); - - beforeEach(async () => { - await Utils.pressEscape(); - }); - - afterEach(async () => { - await Utils.pressEscape(); - await page.header.expandSideNav(); - await page.clickPersonalFiles(); - }); - - afterAll(async () => { - await adminApiActions.login(); - await adminApiActions.deleteSites([...publicAdminSites, ...moderatedSites]); - }); - - describe('Join a public library', () => { - beforeAll(async () => { - await adminApiActions.sites.createSite(sitePublic1Admin); - await apis.user.favorites.addFavoriteById('site', sitePublic1Admin); - }); - - afterAll(async () => { - await adminApiActions.sites.deleteSite(sitePublic1Admin); - }); - - it('[C290105] from Favorite Libraries', async () => { - await page.goToFavoriteLibrariesAndWait(); - await dataTable.selectItem(sitePublic1Admin); - await BrowserActions.click(toolbar.joinButton); - - expect(await dataTable.getLibraryRole(sitePublic1Admin)).toEqual(SITE_ROLES.SITE_CONSUMER.LABEL); - }); - - it('[C306959] from Search Results', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkLibraries(); - await searchInput.searchForLibrary(siteSearchPublic1Admin); - await dataTable.waitForBody(); - await dataTable.selectItem(siteSearchPublic1Admin); - await BrowserActions.click(toolbar.joinButton); - - expect(await dataTable.getLibraryRole(siteSearchPublic1Admin)).toEqual(SITE_ROLES.SITE_CONSUMER.LABEL); - }); - }); - - describe('Join a moderated library', () => { - beforeAll(async () => { - await adminApiActions.sites.createSite(siteModerated1Admin, SITE_VISIBILITY.MODERATED); - await apis.user.favorites.addFavoriteById('site', siteModerated1Admin); - await apis.user.queries.waitForSites(siteSearchModerated1Admin, { expect: 1 }); - }); - - afterAll(async () => { - await adminApiActions.sites.deleteSite(siteModerated1Admin); - }); - - it('[C290109] from Favorite Libraries', async () => { - await page.goToFavoriteLibrariesAndWait(); - await dataTable.selectItem(siteModerated1Admin); - await BrowserActions.click(toolbar.joinButton); - - expect(await dataTable.getLibraryRole(siteModerated1Admin)).toEqual(SITE_ROLES.NONE.LABEL); - const hasJoinRequest = await apis.user.sites.hasMembershipRequest(siteModerated1Admin); - expect(hasJoinRequest).toBe(true, `Join request does not exist on ${siteModerated1Admin}`); - }); - - it('[C306960] from Search Results', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkLibraries(); - await searchInput.searchForLibrary(siteSearchModerated1Admin); - await dataTable.waitForBody(); - await dataTable.selectItem(siteSearchModerated1Admin); - await BrowserActions.click(toolbar.joinButton); - - expect(await dataTable.getLibraryRole(siteSearchModerated1Admin)).toEqual(SITE_ROLES.NONE.LABEL); - const hasJoinRequest = await apis.user.sites.hasMembershipRequest(siteSearchModerated1Admin); - expect(hasJoinRequest).toBe(true, `Join request does not exist on ${siteSearchModerated1Admin}`); - }); - }); - - describe('Leave a library', () => { - const adminSites = [sitePublic2Admin, sitePublic3Admin, sitePublic4Admin, sitePublic5Admin]; - const userSites = [sitePublicUser]; - - beforeAll(async () => { - await adminApiActions.sites.createSites(adminSites); - await apis.user.sites.createSites(userSites); - - await apis.user.favorites.addFavoriteById('site', sitePublic3Admin); - await adminApiActions.sites.addSiteMember(sitePublic2Admin, username, SITE_ROLES.SITE_COLLABORATOR.ROLE); - await adminApiActions.sites.addSiteMember(sitePublic3Admin, username, SITE_ROLES.SITE_MANAGER.ROLE); - await adminApiActions.sites.addSiteMember(siteSearchPublic2Admin, username, SITE_ROLES.SITE_CONTRIBUTOR.ROLE); - await adminApiActions.sites.addSiteMember(sitePublic4Admin, username, SITE_ROLES.SITE_MANAGER.ROLE); - await adminApiActions.sites.addSiteMember(sitePublic5Admin, username, SITE_ROLES.SITE_MANAGER.ROLE); - await apis.user.queries.waitForSites(siteSearchPublic2Admin, { expect: 1 }); - }); - - afterAll(async () => { - await adminApiActions.deleteSites(adminSites); - await apis.user.sites.deleteSites(userSites); - }); - - it('[C290106] from My Libraries', async () => { - await page.goToMyLibrariesAndWait(); - await dataTable.selectItem(sitePublic2Admin); - await BrowserActions.click(toolbar.leaveButton); - await page.waitForDialog(); - await BrowserActions.click(confirmDialog.okButton); - - expect(await page.getSnackBarMessage()).toEqual(`You have left the library`); - expect(await dataTable.isItemPresent(sitePublic2Admin)).toBe(false, `${sitePublic2Admin} is displayed`); - }); - - it('[C290110] from Favorite Libraries', async () => { - await page.goToFavoriteLibrariesAndWait(); - await dataTable.selectItem(sitePublic3Admin); - await BrowserActions.click(toolbar.leaveButton); - await page.waitForDialog(); - await BrowserActions.click(confirmDialog.okButton); - - expect(await page.getSnackBarMessage()).toEqual(`You have left the library`); - expect(await dataTable.isItemPresent(sitePublic3Admin)).toBe(true, `${sitePublic3Admin} is not displayed`); - }); - - it('[C306961] from Search Results', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkLibraries(); - await searchInput.searchForLibrary(siteSearchPublic2Admin); - await dataTable.waitForBody(); - - await dataTable.selectItem(siteSearchPublic2Admin); - await BrowserActions.click(toolbar.leaveButton); - await page.waitForDialog(); - await BrowserActions.click(confirmDialog.okButton); - - expect(await page.getSnackBarMessage()).toEqual(`You have left the library`); - expect(await dataTable.isItemPresent(siteSearchPublic2Admin)).toBe(true, `${siteSearchPublic2Admin} is not displayed`); - }); - - it('[C290136] Confirmation dialog UI', async () => { - await page.goToMyLibrariesAndWait(); - await dataTable.selectItem(sitePublic4Admin); - await BrowserActions.click(toolbar.leaveButton); - await page.waitForDialog(); - - expect(await confirmDialog.isDialogOpen()).toBe(true, 'Confirm delete dialog not open'); - expect(await confirmDialog.getDialogTitle()).toContain('Leave this library?'); - expect(await confirmDialog.getText()).toContain('Leaving will remove your access.'); - expect(await confirmDialog.isOkEnabled()).toBe(true, 'OK button is not enabled'); - expect(await confirmDialog.isCancelEnabled()).toBe(true, 'Cancel button is not enabled'); - }); - - it('[C290111] Cancel Leave Library', async () => { - await page.goToMyLibrariesAndWait(); - await dataTable.selectItem(sitePublic5Admin); - await BrowserActions.click(toolbar.leaveButton); - await page.waitForDialog(); - - expect(await confirmDialog.isCancelEnabled()).toBe(true, 'Cancel button is not enabled'); - await BrowserActions.click(confirmDialog.cancelButton); - - expect(await dataTable.isItemPresent(sitePublic5Admin)).toBe(true, `${sitePublic5Admin} was deleted`); - }); - - it('[C290107] Leave a library - failure notification', async () => { - await page.goToMyLibrariesAndWait(); - await dataTable.selectItem(sitePublicUser); - await BrowserActions.click(toolbar.leaveButton); - await page.waitForDialog(); - await BrowserActions.click(confirmDialog.okButton); - - expect(await page.getSnackBarMessage()).toEqual(`Cannot leave this library`); - }); - }); - - describe('Cancel join', () => { - beforeAll(async () => { - await adminApiActions.sites.createSite(siteModerated2Admin, SITE_VISIBILITY.MODERATED); - await apis.user.favorites.addFavoriteById('site', siteModerated2Admin); - await apis.user.sites.requestToJoin(siteModerated2Admin); - await apis.user.sites.requestToJoin(siteSearchModerated2Admin); - await apis.user.queries.waitForSites(siteSearchModerated2Admin, { expect: 1 }); - }); - - afterAll(async () => { - await adminApiActions.sites.deleteSite(siteModerated2Admin); - }); - - it('[C290108] from Favorite Libraries', async () => { - await page.goToFavoriteLibrariesAndWait(); - await dataTable.selectItem(siteModerated2Admin); - await toolbar.clickButton('Cancel Join Request'); - - expect(await page.getSnackBarMessage()).toEqual(`Canceled the request to join the library`); - - const hasJoinRequest = await apis.user.sites.hasMembershipRequest(siteModerated2Admin); - expect(hasJoinRequest).toBe(false, `Join request exists on ${siteModerated2Admin}`); - }); - - it('[C306962] from Search Results', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkLibraries(); - await searchInput.searchForLibrary(siteSearchModerated2Admin); - await dataTable.waitForBody(); - - await dataTable.selectItem(siteSearchModerated2Admin); - await toolbar.clickButton('Cancel Join Request'); - - expect(await page.getSnackBarMessage()).toEqual(`Canceled the request to join the library`); - - const hasJoinRequest = await apis.user.sites.hasMembershipRequest(siteSearchModerated2Admin); - expect(hasJoinRequest).toBe(false, `Join request exists on ${siteSearchModerated2Admin}`); - }); - }); - - describe('Mark library as favorite', () => { - beforeAll(async () => { - await adminApiActions.sites.createSite(sitePublic6Admin); - await adminApiActions.sites.addSiteMember(sitePublic6Admin, username, SITE_ROLES.SITE_MANAGER.ROLE); - await apis.user.queries.waitForSites(siteSearchPublic3Admin, { expect: 1 }); - }); - - afterAll(async () => { - await adminApiActions.sites.deleteSite(sitePublic6Admin); - }); - - it('[C289974] from My Libraries', async () => { - await page.goToMyLibrariesAndWait(); - await dataTable.selectItem(sitePublic6Admin); - await toolbar.clickMoreActionsFavorite(); - - expect(await apis.user.favorites.isFavoriteWithRetry(sitePublic6Admin, { expect: true })).toBe(true, `${sitePublic6Admin} not favorite`); - }); - - it('[C306963] from Search Results', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkLibraries(); - await searchInput.searchForLibrary(siteSearchPublic3Admin); - await dataTable.waitForBody(); - - await dataTable.selectItem(siteSearchPublic3Admin); - await toolbar.clickMoreActionsFavorite(); - - expect(await apis.user.favorites.isFavoriteWithRetry(siteSearchPublic3Admin, { expect: true })).toBe( - true, - `${siteSearchPublic3Admin} not favorite` - ); - }); - }); - - describe('Remove library from favorites', () => { - const adminSites = [sitePublic7Admin, sitePublic8Admin]; - - beforeAll(async () => { - await adminApiActions.sites.createSites(adminSites); - - await apis.user.favorites.addFavoriteById('site', sitePublic7Admin); - await apis.user.favorites.addFavoriteById('site', sitePublic8Admin); - - await apis.user.favorites.addFavoriteById('site', siteSearchPublic4Admin); - await adminApiActions.sites.addSiteMember(sitePublic7Admin, username, SITE_ROLES.SITE_MANAGER.ROLE); - await adminApiActions.sites.addSiteMember(sitePublic8Admin, username, SITE_ROLES.SITE_MANAGER.ROLE); - await adminApiActions.sites.addSiteMember(siteSearchPublic4Admin, username, SITE_ROLES.SITE_MANAGER.ROLE); - await apis.user.queries.waitForSites(siteSearchPublic4Admin, { expect: 1 }); - }); - - afterAll(async () => { - await adminApiActions.sites.deleteSites(adminSites); - }); - - it('[C289975] from My Libraries', async () => { - await page.goToMyLibrariesAndWait(); - await dataTable.selectItem(sitePublic7Admin); - await toolbar.clickMoreActionsRemoveFavorite(); - - expect(await apis.user.favorites.isFavoriteWithRetry(sitePublic7Admin, { expect: false })).toBe(false, `${sitePublic7Admin} still favorite`); - }); - - it('[C289976] from Favorite Libraries', async () => { - await page.goToFavoriteLibrariesAndWait(); - await dataTable.selectItem(sitePublic8Admin); - await toolbar.clickMoreActionsRemoveFavorite(); - - expect(await dataTable.isItemPresent(sitePublic8Admin)).toBe(false, `${sitePublic8Admin} is displayed`); - expect(await apis.user.favorites.isFavoriteWithRetry(sitePublic8Admin, { expect: false })).toBe(false, `${sitePublic8Admin} still favorite`); - }); - - it('[C306964] from Search Results', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkLibraries(); - await searchInput.searchForLibrary(siteSearchPublic4Admin); - await dataTable.waitForBody(); - - await dataTable.selectItem(siteSearchPublic4Admin); - await toolbar.clickMoreActionsRemoveFavorite(); - - expect(await apis.user.favorites.isFavoriteWithRetry(siteSearchPublic4Admin, { expect: false })).toBe( - false, - `${siteSearchPublic4Admin} still favorite` - ); - }); - }); - - describe('Delete a library', () => { - const userSites = [siteForDelete1, siteForDelete2, siteSearchForDelete]; - - beforeAll(async () => { - await apis.user.sites.createSites(userSites); - await apis.user.queries.waitForSites(siteSearchForDelete, { expect: 1 }); - }); - - it('[C289988] from My Libraries', async () => { - await page.goToMyLibrariesAndWait(); - await dataTable.selectItem(siteForDelete1); - await toolbar.clickMoreActionsDelete(); - - expect(await page.getSnackBarMessage()).toEqual(`Library deleted`); - expect(await dataTable.isItemPresent(siteForDelete1)).toBe(false, `${siteForDelete1} still displayed`); - }); - - it('[C289991] from Favorite Libraries', async () => { - await page.goToFavoriteLibrariesAndWait(); - await dataTable.selectItem(siteForDelete2); - await toolbar.clickMoreActionsDelete(); - - expect(await page.getSnackBarMessage()).toEqual(`Library deleted`); - expect(await dataTable.isItemPresent(siteForDelete2)).toBe(false, `${siteForDelete2} still displayed`); - }); - - it('[C306965] from Search Results', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkLibraries(); - await searchInput.searchForLibrary(siteSearchForDelete); - await dataTable.waitForBody(); - - await dataTable.selectItem(siteSearchForDelete); - await toolbar.clickMoreActionsDelete(); - - expect(await page.getSnackBarMessage()).toEqual(`Library deleted`); - expect(await dataTable.isItemPresent(siteSearchForDelete)).toBe(false, `${siteSearchForDelete} still displayed`); - }); - }); -}); diff --git a/projects/aca-playwright-shared/src/api/sites-api.ts b/projects/aca-playwright-shared/src/api/sites-api.ts index f30c6afd4..1b3321810 100755 --- a/projects/aca-playwright-shared/src/api/sites-api.ts +++ b/projects/aca-playwright-shared/src/api/sites-api.ts @@ -23,7 +23,7 @@ */ import { ApiClientFactory } from './api-client-factory'; -import { Site, SiteBodyCreate, SiteEntry, SiteMemberEntry, SiteMembershipBodyCreate, SiteMembershipBodyUpdate } from '@alfresco/js-api'; +import { Site, SiteBodyCreate, SiteEntry, SiteMemberEntry, SiteMembershipBodyCreate, SiteMembershipBodyUpdate, SiteMembershipRequestBodyCreate, SiteMembershipRequestEntry } from '@alfresco/js-api'; export class SitesApi { private apiService: ApiClientFactory; @@ -109,4 +109,36 @@ export class SitesApi { } } } + + async createSiteMembershipRequestForPerson(personId: string, siteId: string): Promise { + const body = { + id: siteId + } as SiteMembershipRequestBodyCreate; + + try { + return await this.apiService.sites.createSiteMembershipRequestForPerson(personId, body); + } catch (error) { + console.error(`SitesApi createSiteMembershipRequestForPerson : catch : `, error); + return null; + } + } + + async approveSiteMembershipRequest(siteId: string, inviteeId: string): Promise { + try { + return await this.apiService.sites.approveSiteMembershipRequest(siteId, inviteeId); + } catch (error) { + console.error(`SitesApi approveSiteMembershipRequest : catch : `, error); + return null; + } + } + + async hasMembershipRequest(personId: string, siteId: string): Promise { + try { + const requests = (await this.apiService.sites.listSiteMembershipRequestsForPerson(personId)).list.entries.map((e) => e.entry.id); + return requests.includes(siteId); + } catch (error) { + console.error(`SitesApi hasMembershipRequest : catch : `, error); + return null; + } + } } diff --git a/projects/aca-playwright-shared/src/fixtures/page-initialization.ts b/projects/aca-playwright-shared/src/fixtures/page-initialization.ts index 39ba021ca..c4b28a0c2 100644 --- a/projects/aca-playwright-shared/src/fixtures/page-initialization.ts +++ b/projects/aca-playwright-shared/src/fixtures/page-initialization.ts @@ -38,7 +38,8 @@ import { LoginPage, NodesApi, SitesApi, - users + users, + FavoritesLibrariesPage } from '../'; interface Pages { @@ -51,6 +52,7 @@ interface Pages { favoritePage: FavoritesPage; trashPage: TrashPage; loginPage: LoginPage; + favoriteLibrariesPage: FavoritesLibrariesPage; } interface Api { @@ -109,4 +111,7 @@ export const test = base.extend({ myLibrariesPage: async ({ page }, use) => { await use(new MyLibrariesPage(page)); }, + favoriteLibrariesPage: async ({ page }, use) => { + await use(new FavoritesLibrariesPage(page)); + } }); diff --git a/projects/aca-playwright-shared/src/page-objects/components/dialogs/adf-confirm-dialog.component.ts b/projects/aca-playwright-shared/src/page-objects/components/dialogs/adf-confirm-dialog.component.ts new file mode 100644 index 000000000..0590fa0a6 --- /dev/null +++ b/projects/aca-playwright-shared/src/page-objects/components/dialogs/adf-confirm-dialog.component.ts @@ -0,0 +1,39 @@ +/*! + * 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 + * along with Alfresco. If not, see . + */ + +import { Page } from '@playwright/test'; +import { BaseComponent } from '../base.component'; + +export class AdfConfirmDialogComponent extends BaseComponent { + private static rootElement = 'adf-confirm-dialog'; + + constructor(page: Page) { + super(page, AdfConfirmDialogComponent.rootElement); + } + + getDialogTitle = (text: string) => this.getChild('[data-automation-id="adf-confirm-dialog-title"]', { hasText: text }); + getDialogContent = (text: string) => this.getChild('[data-automation-id="adf-confirm-dialog-base-message"]', { hasText: text }); + okButton = this.getChild('[data-automation-id="adf-confirm-dialog-confirmation"]'); + cancelButton = this.getChild('[data-automation-id="adf-confirm-dialog-reject"]'); +} diff --git a/projects/aca-playwright-shared/src/page-objects/components/dialogs/index.ts b/projects/aca-playwright-shared/src/page-objects/components/dialogs/index.ts index c1504a172..c1a913f24 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/dialogs/index.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/dialogs/index.ts @@ -28,3 +28,4 @@ export * from './password-overlay-dialog.component'; export * from './viewer-overlay-dialog.component'; export * from './content-node-selector-dialog'; export * from './create-from-template-dialog-component'; +export * from './adf-confirm-dialog.component'; diff --git a/projects/aca-playwright-shared/src/page-objects/pages/favorites-libraries.page.ts b/projects/aca-playwright-shared/src/page-objects/pages/favorites-libraries.page.ts index c6d57bb9e..1f71a9305 100644 --- a/projects/aca-playwright-shared/src/page-objects/pages/favorites-libraries.page.ts +++ b/projects/aca-playwright-shared/src/page-objects/pages/favorites-libraries.page.ts @@ -26,7 +26,7 @@ import { Page } from '@playwright/test'; import { BasePage } from './base.page'; import { DataTableComponent, MatMenuComponent, SidenavComponent, ViewerComponent } from '../components'; import { AcaHeader } from '../components/aca-header.component'; -import { AdfFolderDialogComponent, ViewerOverlayDialogComponent } from '../components/dialogs'; +import { AdfConfirmDialogComponent, AdfFolderDialogComponent, ViewerOverlayDialogComponent } from '../components/dialogs'; export class FavoritesLibrariesPage extends BasePage { private static pageUrl = 'favorite/libraries'; @@ -42,4 +42,5 @@ export class FavoritesLibrariesPage extends BasePage { public viewer = new ViewerComponent(this.page); public viewerDialog = new ViewerOverlayDialogComponent(this.page); public sidenav = new SidenavComponent(this.page); + public confirmDialogComponent = new AdfConfirmDialogComponent(this.page); } diff --git a/projects/aca-playwright-shared/src/page-objects/pages/my-libraries.page.ts b/projects/aca-playwright-shared/src/page-objects/pages/my-libraries.page.ts index 8fe5e44ba..a6f13b402 100644 --- a/projects/aca-playwright-shared/src/page-objects/pages/my-libraries.page.ts +++ b/projects/aca-playwright-shared/src/page-objects/pages/my-libraries.page.ts @@ -35,7 +35,8 @@ import { ContentNodeSelectorDialog, Breadcrumb, SidenavComponent, - CreateFromTemplateDialogComponent + CreateFromTemplateDialogComponent, + AdfConfirmDialogComponent } from '../components'; export class MyLibrariesPage extends BasePage { @@ -56,6 +57,7 @@ export class MyLibrariesPage extends BasePage { public sidenav = new SidenavComponent(this.page); public contentNodeSelector = new ContentNodeSelectorDialog(this.page); public createFromTemplateDialogComponent = new CreateFromTemplateDialogComponent(this.page); + public confirmDialogComponent = new AdfConfirmDialogComponent(this.page); async selectCreateLibrary(): Promise { await this.acaHeader.createButton.click(); diff --git a/projects/aca-playwright-shared/src/page-objects/pages/search.page.ts b/projects/aca-playwright-shared/src/page-objects/pages/search.page.ts index 1e72c1fcf..cd9b63d5b 100644 --- a/projects/aca-playwright-shared/src/page-objects/pages/search.page.ts +++ b/projects/aca-playwright-shared/src/page-objects/pages/search.page.ts @@ -26,7 +26,7 @@ import { Page } from '@playwright/test'; import { BasePage } from './base.page'; import { DataTableComponent, MatMenuComponent, ViewerComponent, SearchInputComponent, SearchOverlayComponent, SidenavComponent } from '../components'; import { AcaHeader } from '../components/aca-header.component'; -import { AdfFolderDialogComponent } from '../components/dialogs'; +import { AdfConfirmDialogComponent, AdfFolderDialogComponent } from '../components/dialogs'; export class SearchPage extends BasePage { private static pageUrl = 'search'; @@ -43,4 +43,5 @@ export class SearchPage extends BasePage { public searchInput = new SearchInputComponent(this.page); public searchOverlay = new SearchOverlayComponent(this.page); public sidenav = new SidenavComponent(this.page); + public confirmDialogComponent = new AdfConfirmDialogComponent(this.page); } diff --git a/projects/aca-testing-shared/src/components/dialog/confirm-dialog.ts b/projects/aca-testing-shared/src/components/dialog/confirm-dialog.ts index ad20c6e73..b601478a4 100755 --- a/projects/aca-testing-shared/src/components/dialog/confirm-dialog.ts +++ b/projects/aca-testing-shared/src/components/dialog/confirm-dialog.ts @@ -27,7 +27,6 @@ import { GenericDialog } from '../dialog/generic-dialog'; import { isPresentAndEnabled } from '../../utilities/utils'; export class ConfirmDialog extends GenericDialog { - okButton = this.childElement(by.buttonText('OK')); cancelButton = this.childElement(by.buttonText('Cancel')); keepButton = this.childElement(by.buttonText('Keep')); deleteButton = this.childElement(by.buttonText('Delete')); @@ -41,10 +40,6 @@ export class ConfirmDialog extends GenericDialog { return this.content.getText(); } - async isOkEnabled(): Promise { - return isPresentAndEnabled(this.okButton); - } - async isCancelEnabled(): Promise { return isPresentAndEnabled(this.cancelButton); } diff --git a/projects/aca-testing-shared/src/components/toolbar/toolbar.ts b/projects/aca-testing-shared/src/components/toolbar/toolbar.ts index 1671d39c7..be161dc46 100755 --- a/projects/aca-testing-shared/src/components/toolbar/toolbar.ts +++ b/projects/aca-testing-shared/src/components/toolbar/toolbar.ts @@ -38,8 +38,6 @@ export class Toolbar extends Component { downloadButton = element(By.css(`.mat-icon-button[title='Download']`)); viewDetailsButton = element(By.css(`button[title='View Details']`)); printButton = element(By.css(`button[title='Print']`)); - joinButton = element(By.css(`button[title='Join']`)); - leaveButton = element(By.css(`button[title='Leave Library']`)); permanentlyDeleteButton = element(By.css(`button[title='Permanently Delete']`)); restoreButton = element(By.css(`button[title='Restore']`)); searchIconButton = element(By.css(`button[title='Search']`));