diff --git a/e2e/playwright/list-views/src/tests/favorites.spec.ts b/e2e/playwright/list-views/src/tests/favorites.spec.ts index beb927bbb..f1c21370a 100644 --- a/e2e/playwright/list-views/src/tests/favorites.spec.ts +++ b/e2e/playwright/list-views/src/tests/favorites.spec.ts @@ -23,11 +23,12 @@ */ import { expect } from '@playwright/test'; -import { ApiClientFactory, LoginPage, NodesApi, Utils, test, SitesApi, FavoritesPageApi, timeouts } from '@alfresco/playwright-shared'; +import { ApiClientFactory, NodesApi, Utils, test, SitesApi, FavoritesPageApi, timeouts, TrashcanApi } from '@alfresco/playwright-shared'; import { Site } from '@alfresco/js-api'; test.describe('Favorites Files', () => { let nodesApi: NodesApi; + let trashcanApi: TrashcanApi; let siteActionsAdmin: SitesApi; const username = `user-${Utils.random()}`; const siteName = `site-${Utils.random()}`; @@ -45,6 +46,7 @@ test.describe('Favorites Files', () => { await apiClientFactory.setUpAcaBackend('admin'); await apiClientFactory.createUser({ username }); nodesApi = await NodesApi.initialize(username, username); + trashcanApi = await TrashcanApi.initialize(username, username); const nodesApiAdmin = await NodesApi.initialize('admin'); siteActionsAdmin = await SitesApi.initialize('admin'); const favoritesActions = await FavoritesPageApi.initialize(username, username); @@ -75,20 +77,12 @@ test.describe('Favorites Files', () => { } }); - test.beforeEach(async ({ page }) => { - const loginPage = new LoginPage(page); - await loginPage.loginUser( - { username, password: username }, - { - withNavigation: true, - waitForLoading: true - } - ); + test.beforeEach(async ({ loginPage }) => { + await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed'); }); test.afterAll(async () => { - await nodesApi.deleteCurrentUserNodes(); - await siteActionsAdmin.deleteSites([siteName]); + await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed', siteActionsAdmin, [siteName]); }); test.describe(`Regular user's Favorites files`, () => { diff --git a/e2e/playwright/list-views/src/tests/file-libraries.spec.ts b/e2e/playwright/list-views/src/tests/file-libraries.spec.ts index f2774ce8f..fe171ff46 100755 --- a/e2e/playwright/list-views/src/tests/file-libraries.spec.ts +++ b/e2e/playwright/list-views/src/tests/file-libraries.spec.ts @@ -23,7 +23,7 @@ */ import { expect } from '@playwright/test'; -import { ApiClientFactory, FavoritesPageApi, LoginPage, SitesApi, Utils, test, timeouts } from '@alfresco/playwright-shared'; +import { ApiClientFactory, FavoritesPageApi, SitesApi, Utils, test, timeouts } from '@alfresco/playwright-shared'; import { Site } from '@alfresco/js-api'; test.describe('File Libraries', () => { @@ -88,15 +88,8 @@ test.describe('File Libraries', () => { }); test.describe('My Libraries', () => { - test.beforeEach(async ({ page, myLibrariesPage }) => { - const loginPage = new LoginPage(page); - await loginPage.loginUser( - { username, password: username }, - { - withNavigation: true, - waitForLoading: true - } - ); + test.beforeEach(async ({ loginPage, myLibrariesPage }) => { + await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed'); await myLibrariesPage.navigate(); }); @@ -142,15 +135,8 @@ test.describe('File Libraries', () => { }); test.describe('Favorite Libraries', () => { - test.beforeEach(async ({ page, favoritesLibrariesPage }) => { - const loginPage = new LoginPage(page); - await loginPage.loginUser( - { username, password: username }, - { - withNavigation: true, - waitForLoading: true - } - ); + test.beforeEach(async ({ loginPage, favoritesLibrariesPage }) => { + await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed'); await favoritesLibrariesPage.navigate(); }); diff --git a/e2e/playwright/list-views/src/tests/generic-errors.spec.ts b/e2e/playwright/list-views/src/tests/generic-errors.spec.ts index 616726344..28b7f2894 100755 --- a/e2e/playwright/list-views/src/tests/generic-errors.spec.ts +++ b/e2e/playwright/list-views/src/tests/generic-errors.spec.ts @@ -23,7 +23,7 @@ */ import { expect } from '@playwright/test'; -import { ApiClientFactory, LoginPage, NodesApi, TrashcanApi, Utils, test } from '@alfresco/playwright-shared'; +import { ApiClientFactory, NodesApi, TrashcanApi, Utils, test } from '@alfresco/playwright-shared'; test.describe('Generic errors', () => { const username = `user-${Utils.random()}`; @@ -52,15 +52,8 @@ test.describe('Generic errors', () => { } }); - test.beforeEach(async ({ page }) => { - const loginPage = new LoginPage(page); - await loginPage.loginUser( - { username, password: username }, - { - withNavigation: true, - waitForLoading: true - } - ); + test.beforeEach(async ({ loginPage }) => { + await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed'); }); test.afterAll(async () => { diff --git a/e2e/playwright/list-views/src/tests/permissions.spec.ts b/e2e/playwright/list-views/src/tests/permissions.spec.ts index e957f8975..b8ee304eb 100755 --- a/e2e/playwright/list-views/src/tests/permissions.spec.ts +++ b/e2e/playwright/list-views/src/tests/permissions.spec.ts @@ -74,15 +74,8 @@ test.describe('Special permissions', () => { await shareApiUser.waitForFilesToBeShared([fileId]); }); - test.beforeEach(async ({ page }) => { - const loginPage = new LoginPage(page); - await loginPage.loginUser( - { username, password: username }, - { - withNavigation: true, - waitForLoading: true - } - ); + test.beforeEach(async ({ loginPage }) => { + await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed'); }); test.afterEach(async () => { diff --git a/e2e/playwright/list-views/src/tests/personal-files.spec.ts b/e2e/playwright/list-views/src/tests/personal-files.spec.ts index 35e4fad9d..e4af18a15 100644 --- a/e2e/playwright/list-views/src/tests/personal-files.spec.ts +++ b/e2e/playwright/list-views/src/tests/personal-files.spec.ts @@ -23,10 +23,11 @@ */ import { expect } from '@playwright/test'; -import { APP_ROUTES, ApiClientFactory, LoginPage, NodesApi, SIDEBAR_LABELS, Utils, test } from '@alfresco/playwright-shared'; +import { APP_ROUTES, ApiClientFactory, NodesApi, SIDEBAR_LABELS, Utils, test, TrashcanApi } from '@alfresco/playwright-shared'; test.describe('Personal Files', () => { let nodesApi: NodesApi; + let trashcanApi: TrashcanApi; const username = `user-${Utils.random()}`; const userFolder = `user-folder-${Utils.random()}`; @@ -36,6 +37,7 @@ test.describe('Personal Files', () => { await apiClientFactory.setUpAcaBackend('admin'); await apiClientFactory.createUser({ username }); nodesApi = await NodesApi.initialize(username, username); + trashcanApi = await TrashcanApi.initialize(username, username); await nodesApi.createFolder(userFolder); } catch (error) { console.error(`beforeAll failed : ${error}`); @@ -43,19 +45,12 @@ test.describe('Personal Files', () => { }); test.afterAll(async () => { - await nodesApi.deleteCurrentUserNodes(); + await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed'); }); test.describe(`Regular user's personal files`, () => { - test.beforeEach(async ({ page }) => { - const loginPage = new LoginPage(page); - await loginPage.loginUser( - { username, password: username }, - { - withNavigation: true, - waitForLoading: true - } - ); + test.beforeEach(async ({ loginPage }) => { + await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed'); }); test('[C217142] has the correct columns', async ({ personalFiles }) => { @@ -65,6 +60,7 @@ test.describe('Personal Files', () => { }); test('[C217143] has default sorted column', async ({ personalFiles }) => { + await Utils.reloadPageIfDatatableEmpty(personalFiles); expect(await personalFiles.dataTable.getSortedColumnHeaderText()).toBe('Name'); }); diff --git a/e2e/playwright/list-views/src/tests/recent-files.spec.ts b/e2e/playwright/list-views/src/tests/recent-files.spec.ts index 84efecf8f..4f2991b04 100755 --- a/e2e/playwright/list-views/src/tests/recent-files.spec.ts +++ b/e2e/playwright/list-views/src/tests/recent-files.spec.ts @@ -23,19 +23,18 @@ */ import { expect } from '@playwright/test'; -import { ApiClientFactory, LoginPage, NodesApi, SearchPageApi, SitesApi, TrashcanApi, Utils, test, timeouts } from '@alfresco/playwright-shared'; +import { ApiClientFactory, NodesApi, SearchPageApi, SitesApi, TrashcanApi, Utils, test, timeouts } from '@alfresco/playwright-shared'; import { Site } from '@alfresco/js-api'; test.describe('Recent Files', () => { let nodeActionsUser: NodesApi; let siteActionsUser: SitesApi; + let trashcanApi: TrashcanApi; const username = `user-${Utils.random()}`; const folderName = `folder-${Utils.random()}`; - let folderId: string; const fileName1 = `file-${Utils.random()}.txt`; const fileName2 = `file-${Utils.random()}.txt`; - let file2Id: string; const fileName3 = `file-${Utils.random()}.txt`; const siteName = `site-${Utils.random()}`; @@ -49,10 +48,11 @@ test.describe('Recent Files', () => { await apiClientFactory.createUser({ username }); nodeActionsUser = await NodesApi.initialize(username, username); siteActionsUser = await SitesApi.initialize(username, username); + trashcanApi = await TrashcanApi.initialize(username, username); - folderId = (await nodeActionsUser.createFolder(folderName)).entry.id; + await nodeActionsUser.createFolder(folderName); await nodeActionsUser.createFiles([fileName1], folderName); - file2Id = (await nodeActionsUser.createFile(fileName2)).entry.id; + await nodeActionsUser.createFile(fileName2); const id = (await nodeActionsUser.createFile(fileName3)).entry.id; await nodeActionsUser.deleteNodes([id], false); @@ -66,23 +66,13 @@ test.describe('Recent Files', () => { await searchApi.waitForApi(username, { expect: 3 }); }); - test.beforeEach(async ({ page, recentFilesPage }) => { - const loginPage = new LoginPage(page); - await loginPage.loginUser( - { username, password: username }, - { - withNavigation: true, - waitForLoading: true - } - ); + test.beforeEach(async ({ loginPage, recentFilesPage }) => { + await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed'); await recentFilesPage.navigate(); }); test.afterAll(async () => { - await nodeActionsUser.deleteNodes([folderId, file2Id]); - await siteActionsUser.deleteSites([siteName]); - const trashcanApi = await TrashcanApi.initialize(username, username); - await trashcanApi.emptyTrashcan(); + await Utils.deleteNodesSitesEmptyTrashcan(nodeActionsUser, trashcanApi, 'afterAll failed', siteActionsUser, [siteName]); }); test('[C213168] has the correct columns', async ({ recentFilesPage }) => { diff --git a/e2e/playwright/list-views/src/tests/shared-files.spec.ts b/e2e/playwright/list-views/src/tests/shared-files.spec.ts index 7b6c7b7d2..21d8da57b 100644 --- a/e2e/playwright/list-views/src/tests/shared-files.spec.ts +++ b/e2e/playwright/list-views/src/tests/shared-files.spec.ts @@ -23,12 +23,13 @@ */ import { expect } from '@playwright/test'; -import { ApiClientFactory, LoginPage, NodesApi, Utils, test, SitesApi, timeouts, SharedLinksApi } from '@alfresco/playwright-shared'; +import { ApiClientFactory, NodesApi, Utils, test, SitesApi, timeouts, SharedLinksApi, TrashcanApi } from '@alfresco/playwright-shared'; import { Site } from '@alfresco/js-api'; test.describe('Shared Files', () => { let nodesApi: NodesApi; let siteActionsAdmin: SitesApi; + let trashcanApi: TrashcanApi; const username = `user-${Utils.random()}`; const siteName = `site-${Utils.random()}`; @@ -48,6 +49,7 @@ test.describe('Shared Files', () => { const nodesApiAdmin = await NodesApi.initialize('admin'); const shareActionsAdmin = await SharedLinksApi.initialize('admin'); nodesApi = await NodesApi.initialize(username, username); + trashcanApi = await TrashcanApi.initialize(username, username); const shareActions = await SharedLinksApi.initialize(username, username); await siteActionsAdmin.createSite(siteName, Site.VisibilityEnum.PUBLIC); @@ -73,21 +75,13 @@ test.describe('Shared Files', () => { await shareActions.waitForFilesToNotBeShared([file2Id, file3Id]); }); - test.beforeEach(async ({ page, sharedPage }) => { - const loginPage = new LoginPage(page); - await loginPage.loginUser( - { username, password: username }, - { - withNavigation: true, - waitForLoading: true - } - ); + test.beforeEach(async ({ loginPage, sharedPage }) => { + await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed'); await sharedPage.navigate(); }); test.afterAll(async () => { - await siteActionsAdmin.deleteSites([siteName]); - await nodesApi.deleteCurrentUserNodes(); + await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed', siteActionsAdmin, [siteName]); }); test('[C213113] has the correct columns', async ({ sharedPage }) => { diff --git a/e2e/playwright/list-views/src/tests/trash-admin.spec.ts b/e2e/playwright/list-views/src/tests/trash-admin.spec.ts index 0c0bf5d7d..7d4d59ca1 100755 --- a/e2e/playwright/list-views/src/tests/trash-admin.spec.ts +++ b/e2e/playwright/list-views/src/tests/trash-admin.spec.ts @@ -23,19 +23,21 @@ */ import { expect } from '@playwright/test'; -import { ApiClientFactory, NodesApi, Utils, getUserState, test, LoginPage, users } from '@alfresco/playwright-shared'; +import { ApiClientFactory, NodesApi, Utils, getUserState, test, TrashcanApi, users } from '@alfresco/playwright-shared'; test.use({ storageState: getUserState('admin') }); test.describe('Trash admin', () => { const folderAdmin = `deleteFolder-${Utils.random()}`; let folderAdminId: string; let adminApiActions: NodesApi; + let adminTrashcanApi: TrashcanApi; test.beforeAll(async () => { try { const apiClientFactory = new ApiClientFactory(); await apiClientFactory.setUpAcaBackend('admin'); adminApiActions = await NodesApi.initialize('admin'); + adminTrashcanApi = await TrashcanApi.initialize('admin'); folderAdminId = (await adminApiActions.createFolder(folderAdmin)).entry.id; await adminApiActions.deleteNodeById(folderAdminId, false); } catch (error) { @@ -44,22 +46,11 @@ test.describe('Trash admin', () => { }); test.afterAll(async () => { - try { - await adminApiActions.deleteDeletedNode(folderAdminId); - } catch (error) { - console.error(`----- afterAll failed : ${error}`); - } + await Utils.deleteNodesSitesEmptyTrashcan(adminApiActions, adminTrashcanApi, '----- afterAll failed : '); }); - test.beforeEach(async ({ page }) => { - const loginPage = new LoginPage(page); - await loginPage.loginUser( - { username: users.admin.username, password: users.admin.password }, - { - withNavigation: true, - waitForLoading: true - } - ); + test.beforeEach(async ({ loginPage }) => { + await Utils.tryLoginUser(loginPage, users.admin.username, users.admin.password, 'beforeEach failed'); }); test.describe('as admin', () => { diff --git a/e2e/playwright/list-views/src/tests/trash.spec.ts b/e2e/playwright/list-views/src/tests/trash.spec.ts index 4c32d2eea..af37b4a21 100755 --- a/e2e/playwright/list-views/src/tests/trash.spec.ts +++ b/e2e/playwright/list-views/src/tests/trash.spec.ts @@ -23,12 +23,13 @@ */ import { expect } from '@playwright/test'; -import { ApiClientFactory, LoginPage, NodesApi, SitesApi, Utils, test } from '@alfresco/playwright-shared'; +import { ApiClientFactory, NodesApi, SitesApi, Utils, test, TrashcanApi } from '@alfresco/playwright-shared'; import { Site } from '@alfresco/js-api'; test.describe('Trash', () => { let nodesApi: NodesApi; let siteActionsAdmin: SitesApi; + let trashcanApi: TrashcanApi; const username = `user-${Utils.random()}`; const siteName = `site-${Utils.random()}`; @@ -45,6 +46,7 @@ test.describe('Trash', () => { await apiClientFactory.createUser({ username }); siteActionsAdmin = await SitesApi.initialize('admin'); nodesApi = await NodesApi.initialize(username, username); + trashcanApi = await TrashcanApi.initialize(username, username); const nodesApiAdmin = await NodesApi.initialize('admin'); const folderDeleted = `folder-${Utils.random()}`; @@ -66,27 +68,12 @@ test.describe('Trash', () => { }); test.afterAll(async () => { - try { - await nodesApi.deleteCurrentUserNodes(); - await siteActionsAdmin.deleteSites([siteName]); - } catch (error) { - console.error(`Main afterAll failed: ${error}`); - } + await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'Main afterAll failed: ', siteActionsAdmin, [siteName]); }); test.describe(`Regular user's personal files`, () => { - test.beforeEach(async ({ page }) => { - const loginPage = new LoginPage(page); - await loginPage.loginUser( - { username, password: username }, - { - withNavigation: true, - waitForLoading: true - } - ); - }); - - test.beforeEach(async ({ trashPage }) => { + test.beforeEach(async ({ loginPage, trashPage }) => { + await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed'); await trashPage.navigate(); }); diff --git a/projects/aca-playwright-shared/src/utils/utils.ts b/projects/aca-playwright-shared/src/utils/utils.ts index c1db9e50d..af3cab26c 100644 --- a/projects/aca-playwright-shared/src/utils/utils.ts +++ b/projects/aca-playwright-shared/src/utils/utils.ts @@ -24,7 +24,7 @@ const crypto = require('crypto'); import * as path from 'path'; -import { LoginPage, MyLibrariesPage, PersonalFilesPage, FavoritesLibrariesPage, SearchPage, SharedPage } from '../'; +import { LoginPage, MyLibrariesPage, PersonalFilesPage, FavoritesLibrariesPage, SearchPage, SharedPage, TrashPage } from '../'; import { NodesApi, TrashcanApi, SitesApi } from '@alfresco/playwright-shared'; export class Utils { @@ -102,7 +102,7 @@ export class Utils { static async reloadPageIfRowNotVisible( pageContext: PersonalFilesPage | MyLibrariesPage | FavoritesLibrariesPage | SearchPage | SharedPage, nodeName: string, - errorMessage = 'Error ' + errorMessage = 'reloadPageIfRowNotVisible Error ' ): Promise { try { if (!await pageContext.dataTable.getRowByName(nodeName).isVisible()) { @@ -112,4 +112,17 @@ export class Utils { console.error(`${errorMessage}: ${error}`); } } + + static async reloadPageIfDatatableEmpty( + pageContext: PersonalFilesPage | MyLibrariesPage | FavoritesLibrariesPage | SearchPage | SharedPage | TrashPage, + errorMessage = 'reloadPageIfDatatableEmpty Error ' + ): Promise { + try { + if (await pageContext.dataTable.getEmptyFolderLocator.isVisible() || await pageContext.dataTable.emptyListTitle.isVisible()) { + await pageContext.page.reload({ waitUntil: 'load' }); + } + } catch (error) { + console.error(`${errorMessage}: ${error}`); + } + } }