diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 116b7e375d..0933be6241 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -109,7 +109,7 @@ jobs: fail-fast: false matrix: e2e-suites: - - name: "listViews,navigation,application" + - name: "listViews,navigation" id: 1 - name: "search" id: 2 diff --git a/e2e/playwright/authentication/src/tests/general.spec.ts b/e2e/playwright/authentication/src/tests/general.spec.ts new file mode 100644 index 0000000000..63bcfc4ba4 --- /dev/null +++ b/e2e/playwright/authentication/src/tests/general.spec.ts @@ -0,0 +1,61 @@ +/*! + * 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 { ApiClientFactory, Utils, test } from '@alfresco/playwright-shared'; + +test.describe('Create folders', () => { + const apiClientFactory = new ApiClientFactory(); + let randomFolderName: string; + const sessionTestUser = { + username: `user-${Utils.random()}`, + password: 'user password' + }; + + test.beforeAll(async () => { + await apiClientFactory.setUpAcaBackend('admin'); + await apiClientFactory.createUser(sessionTestUser); + }); + + test.beforeEach(async () => { + randomFolderName = `playwright-folder-${Utils.random()}`; + await apiClientFactory.loginUser(sessionTestUser); + }); + + test('[C286473] should close opened dialogs on session expire', async ({ loginPage, personalFiles }) => { + await loginPage.navigate(); + await loginPage.loginUser({ username: sessionTestUser.username, password: sessionTestUser.password }); + const folderDialog = personalFiles.folderDialog; + await personalFiles.selectCreateFolder(); + await apiClientFactory.tearDown(); + await folderDialog.folderNameInputLocator.fill(randomFolderName); + await folderDialog.createButton.click(); + await personalFiles.page.keyboard.press('Escape'); + await personalFiles.snackBar.message.waitFor({ state: 'attached' }); + expect(await personalFiles.snackBar.message.innerText()).toEqual('The action was unsuccessful. Try again or contact your IT Team.'); + expect(await personalFiles.page.title()).toContain('Sign in'); + await personalFiles.snackBar.message.waitFor({ state: 'detached' }); + expect(await personalFiles.snackBar.message.isVisible(), 'dialog should not be visible').toBe(false); + }); +}); diff --git a/e2e/protractor/suites/application/general.test.ts b/e2e/protractor/suites/application/general.test.ts deleted file mode 100644 index f2f49f4e17..0000000000 --- a/e2e/protractor/suites/application/general.test.ts +++ /dev/null @@ -1,68 +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 { BrowserActions } from '@alfresco/adf-testing'; -import { BrowsingPage, LoginPage, CreateOrEditFolderDialog, Utils, AdminActions } from '@alfresco/aca-testing-shared'; - -describe('General', () => { - const loginPage = new LoginPage(); - const page = new BrowsingPage(); - const createDialog = new CreateOrEditFolderDialog(); - - const adminActions = new AdminActions(); - - const folder = `folder-${Utils.random()}`; - let folderId: string; - - describe('on session expire', () => { - beforeAll(async () => { - await adminActions.login(); - folderId = (await adminActions.nodes.createFolder(folder)).entry.id; - }); - - afterAll(async () => { - await adminActions.deleteNodes([folderId]); - }); - - it('[C286473] should close opened dialogs', async () => { - await loginPage.loginWithAdmin(); - - await page.sidenav.openCreateFolderDialog(); - await createDialog.waitForDialogToOpen(); - await createDialog.enterName(folder); - - await adminActions.logout(); - - await BrowserActions.click(createDialog.createButton); - - expect(await page.getSnackBarMessage()).toEqual('The action was unsuccessful. Try again or contact your IT Team.'); - - expect(await browser.getTitle()).toContain('Sign in'); - - await createDialog.waitForDialogToClose(); - expect(await createDialog.isDialogOpen()).not.toBe(true, 'dialog is present'); - }); - }); -}); diff --git a/e2e/protractor/suites/application/page-titles.test.ts b/e2e/protractor/suites/application/page-titles.test.ts deleted file mode 100755 index 08a0d229b2..0000000000 --- a/e2e/protractor/suites/application/page-titles.test.ts +++ /dev/null @@ -1,134 +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 { LoginPage, BrowsingPage, RepoClient, Utils, AdminActions } from '@alfresco/aca-testing-shared'; - -const PAGE_TITLES = { - PERSONAL_FILES: 'Personal Files', - MY_LIBRARIES: 'My Libraries', - FAVORITE_LIBRARIES: 'Favorite Libraries', - SHARED_FILES: 'Shared', - RECENT_FILES: 'Recent Files', - FAVORITES: 'Favorites', - TRASH: 'Trash', - VIEWER: 'Preview', - SEARCH: 'Search Results' -}; - -describe('Page titles', () => { - const loginPage = new LoginPage(); - const page = new BrowsingPage(); - const { toolbar } = page; - const username = `user-${Utils.random()}`; - const apis = new RepoClient(username, username); - const adminApiActions = new AdminActions(); - const file = `file-${Utils.random()}.txt`; - let fileId: string; - const { searchInput } = page.pageLayoutHeader; - - beforeAll(async () => { - await adminApiActions.createUser({ username }); - }); - - describe('on Login / Logout pages', () => { - it('[C217155] on Login page', async () => { - await loginPage.load(); - expect(await browser.getTitle()).toContain('Sign in'); - }); - - it('[C217156] after logout', async () => { - await loginPage.loginWith(username); - await page.signOut(); - expect(await browser.getTitle()).toContain('Sign in'); - }); - - it('[C280414] when pressing Back after Logout', async () => { - await loginPage.loginWith(username); - await page.signOut(); - await browser.navigate().back(); - expect(await browser.getTitle()).toContain('Sign in'); - }); - }); - - describe('on app pages', () => { - beforeAll(async () => { - await loginPage.loginWith(username); - fileId = (await apis.nodes.createFile(file)).entry.id; - }); - - afterAll(async () => { - await apis.nodes.deleteNodeById(fileId); - }); - - it('[C217157] Personal Files page', async () => { - await page.clickPersonalFiles(); - expect(await browser.getTitle()).toContain(PAGE_TITLES.PERSONAL_FILES); - }); - - it('[C217158] My Libraries page', async () => { - await page.goToMyLibraries(); - expect(await browser.getTitle()).toContain(PAGE_TITLES.MY_LIBRARIES); - }); - - it('[C289907] Favorite Libraries page', async () => { - await page.goToFavoriteLibraries(); - expect(await browser.getTitle()).toContain(PAGE_TITLES.FAVORITE_LIBRARIES); - }); - - it('[C217159] Shared Files page', async () => { - await page.clickSharedFiles(); - expect(await browser.getTitle()).toContain(PAGE_TITLES.SHARED_FILES); - }); - - it('[C217160] Recent Files page', async () => { - await page.clickRecentFiles(); - expect(await browser.getTitle()).toContain(PAGE_TITLES.RECENT_FILES); - }); - - it('[C217161] Favorites page', async () => { - await page.clickFavorites(); - expect(await browser.getTitle()).toContain(PAGE_TITLES.FAVORITES); - }); - - it('[C217162] Trash page', async () => { - await page.clickTrash(); - expect(await browser.getTitle()).toContain(PAGE_TITLES.TRASH); - }); - - it('[C280415] File Preview page', async () => { - await page.clickPersonalFilesAndWait(); - await page.dataTable.doubleClickOnRowByName(file); - expect(await browser.getTitle()).toContain(PAGE_TITLES.VIEWER); - await Utils.pressEscape(); - }); - - it('[C280413] Search Results page', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.searchFor(file); - expect(await browser.getTitle()).toContain(PAGE_TITLES.SEARCH); - }); - }); -}); diff --git a/projects/aca-playwright-shared/src/api/api-client-factory.ts b/projects/aca-playwright-shared/src/api/api-client-factory.ts index 13b55375ff..b8c25094c3 100644 --- a/projects/aca-playwright-shared/src/api/api-client-factory.ts +++ b/projects/aca-playwright-shared/src/api/api-client-factory.ts @@ -152,6 +152,16 @@ export class ApiClientFactory { } } + async loginUser(user: PersonModel) { + let e: any; + try { + e = await this.alfrescoApi.login(user.username, user.password); + } catch (error) { + logger.error(`[API Client Factory] Log in user ${user.username} failed ${e}`); + throw error; + } + } + async createUser(user: PersonModel): Promise { const person = new Person(user); const peopleApi = new PeopleApi(this.alfrescoApi);