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