From 509ab55508b8b5cbe7703ec06f6eb05735eeee8c Mon Sep 17 00:00:00 2001
From: SheenaMalhotra182 <110394264+SheenaMalhotra182@users.noreply.github.com>
Date: Tue, 28 Nov 2023 15:10:14 +0530
Subject: [PATCH] [ACS-6235] Migrated E2Es in favorites.ts file to Playwright
(#3539)
* [ACS-6235] migrated e2es to playwright
* [ACS-6235] migrated e2es to playwright
* [ACS-6235] addressed review comments
---
.../pagination/src/tests/favorites.ts | 105 +++++++++++++++
.../src/tests/multiple-pages-files.spec.ts | 19 ++-
e2e/protractor/suites/pagination/favorites.ts | 127 ------------------
.../pagination/multiple-pages-files.test.ts | 10 --
.../components/pagination.component.ts | 4 +
.../src/page-objects/pages/favorites.page.ts | 7 +-
.../src/utils/timeouts.ts | 2 +-
7 files changed, 133 insertions(+), 141 deletions(-)
create mode 100644 e2e/playwright/pagination/src/tests/favorites.ts
delete mode 100755 e2e/protractor/suites/pagination/favorites.ts
diff --git a/e2e/playwright/pagination/src/tests/favorites.ts b/e2e/playwright/pagination/src/tests/favorites.ts
new file mode 100644
index 0000000000..5205165abc
--- /dev/null
+++ b/e2e/playwright/pagination/src/tests/favorites.ts
@@ -0,0 +1,105 @@
+/*!
+ * 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 { test } from '@alfresco/playwright-shared';
+import { expect } from '@playwright/test';
+
+export function favoritesTests(username: string) {
+ test.describe('Pagination controls : ', () => {
+ test.beforeEach(async ({ loginPage, favoritePage }) => {
+ await loginPage.navigate();
+ await loginPage.loginUser({ username: username, password: username });
+
+ await favoritePage.navigate();
+ await favoritePage.waitForPageLoad();
+ });
+
+ test('[C280113] Pagination control default values', async ({ favoritePage }) => {
+ expect(await favoritePage.pagination.getRange()).toContain('1-25 of 51');
+ expect(await favoritePage.pagination.getMaxItems()).toContain('25');
+ expect(await favoritePage.pagination.getCurrentPage()).toContain('Page 1');
+ expect(await favoritePage.pagination.getTotalPages()).toContain('of 3');
+ expect(await favoritePage.pagination.isPreviousEnabled()).toBe(false);
+ expect(await favoritePage.pagination.isNextEnabled()).toBe(true);
+ });
+
+ test('[C280114] Items per page values', async ({ favoritePage }) => {
+ await favoritePage.pagination.openMaxItemsMenu();
+ expect(await (await favoritePage.pagination.getNthItem(1)).innerText()).toBe('25');
+ expect(await (await favoritePage.pagination.getNthItem(2)).innerText()).toBe('50');
+ expect(await (await favoritePage.pagination.getNthItem(3)).innerText()).toBe('100');
+ await favoritePage.pagination.closeMenu();
+ });
+
+ test('[C280115] current page menu items', async ({ favoritePage }) => {
+ await favoritePage.pagination.openMaxItemsMenu();
+ await favoritePage.pagination.clickMenuItem('25');
+ expect(await favoritePage.pagination.getMaxItems()).toContain('25');
+ expect(await favoritePage.pagination.getTotalPages()).toContain('of 3');
+ expect(await favoritePage.pagination.getItemsCount()).toBe(3);
+ await favoritePage.pagination.closeMenu();
+
+ await favoritePage.pagination.openMaxItemsMenu();
+ await favoritePage.pagination.clickMenuItem('50');
+ expect(await favoritePage.pagination.getMaxItems()).toContain('50');
+ expect(await favoritePage.pagination.getTotalPages()).toContain('of 2');
+
+ await favoritePage.pagination.closeMenu();
+
+ await favoritePage.pagination.openMaxItemsMenu();
+ await favoritePage.pagination.clickMenuItem('100');
+ expect(await favoritePage.pagination.getMaxItems()).toContain('100');
+ expect(await favoritePage.pagination.getTotalPages()).toContain('of 1');
+
+ await favoritePage.pagination.resetToDefaultPageSize();
+ });
+
+ test('[C280116] change the current page from menu', async ({ favoritePage }) => {
+ await favoritePage.pagination.clickOnNextPage();
+ expect(await favoritePage.pagination.getRange()).toContain('Showing 26-50 of 51');
+ expect(await favoritePage.pagination.getCurrentPage()).toContain('Page 2');
+ expect(await favoritePage.pagination.isPreviousEnabled()).toBe(true);
+ expect(await favoritePage.pagination.isNextEnabled()).toBe(true);
+ await favoritePage.pagination.resetToDefaultPageSize();
+ });
+
+ test('[C280119] navigate to next and previous pages', async ({ favoritePage }) => {
+ await favoritePage.pagination.openMaxItemsMenu();
+ await favoritePage.pagination.clickMenuItem('25');
+ expect(await favoritePage.pagination.getMaxItems()).toContain('25');
+ await favoritePage.pagination.clickOnNextPage();
+ expect(await favoritePage.pagination.getRange()).toContain('Showing 26-50 of 51');
+
+ await favoritePage.pagination.clickOnPreviousPage();
+ expect(await favoritePage.pagination.getRange()).toContain('Showing 1-25 of 51');
+ });
+
+ test('[C280118] Next button is disabled on last page', async ({ favoritePage }) => {
+ await favoritePage.pagination.openMaxItemsMenu();
+ await favoritePage.pagination.clickNthItem(3);
+ expect(await favoritePage.pagination.getCurrentPage()).toContain('Page 1');
+ expect(await favoritePage.pagination.isNextEnabled()).toBe(false);
+ });
+ });
+}
diff --git a/e2e/playwright/pagination/src/tests/multiple-pages-files.spec.ts b/e2e/playwright/pagination/src/tests/multiple-pages-files.spec.ts
index 816ab3ff83..431d57f551 100755
--- a/e2e/playwright/pagination/src/tests/multiple-pages-files.spec.ts
+++ b/e2e/playwright/pagination/src/tests/multiple-pages-files.spec.ts
@@ -22,8 +22,9 @@
* from Hyland Software. If not, see .
*/
-import { ApiClientFactory, NodesApi, test, Utils } from '@alfresco/playwright-shared';
+import { ApiClientFactory, FavoritesPageApi, NodesApi, test, timeouts, Utils } from '@alfresco/playwright-shared';
import { personalFilesTests } from './personal-files';
+import { favoritesTests } from './favorites';
test.describe('Pagination on multiple pages : ', () => {
const random = Utils.random();
@@ -31,20 +32,26 @@ test.describe('Pagination on multiple pages : ', () => {
const parent = `parent-${random}`;
let parentId: string;
+ let initialFavoritesTotalItems: number;
const apiClientFactory = new ApiClientFactory();
test.beforeAll(async () => {
+ test.setTimeout(timeouts.extendedTest);
await apiClientFactory.setUpAcaBackend('admin');
await apiClientFactory.createUser({ username });
const nodesApi = await NodesApi.initialize(username, username);
+ const favoritesApi = await FavoritesPageApi.initialize(username, username);
const files = Array(51)
.fill('my-file')
.map((name, index): string => `${name}-${index + 1}-${random}.txt`);
parentId = (await nodesApi.createFolder(parent)).entry.id;
- (await nodesApi.createFiles(files, parent)).list.entries.map((entries) => entries.entry.id);
+ const filesIds = (await nodesApi.createFiles(files, parent)).list.entries.map((entries) => entries.entry.id);
+ initialFavoritesTotalItems = await favoritesApi.getFavoritesTotalItems(username);
+
+ await favoritesApi.addFavoritesByIds('file', filesIds);
});
test.afterAll(async () => {
@@ -54,4 +61,12 @@ test.describe('Pagination on multiple pages : ', () => {
test.describe('on Personal Files', () => {
personalFilesTests(username, parent);
});
+
+ test.describe('on Favorites', () => {
+ test.beforeAll(async () => {
+ const favoritesApi = await FavoritesPageApi.initialize(username, username);
+ await favoritesApi.waitForApi(username, { expect: initialFavoritesTotalItems + 51 });
+ });
+ favoritesTests(username);
+ });
});
diff --git a/e2e/protractor/suites/pagination/favorites.ts b/e2e/protractor/suites/pagination/favorites.ts
deleted file mode 100755
index 316fec04b0..0000000000
--- a/e2e/protractor/suites/pagination/favorites.ts
+++ /dev/null
@@ -1,127 +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 { BrowsingPage, LoginPage, Utils } from '@alfresco/aca-testing-shared';
-
-export function favoritesTests(username: string) {
- const page = new BrowsingPage();
- const loginPage = new LoginPage();
- const { dataTable, pagination } = page;
-
- describe('Pagination controls : ', () => {
- beforeAll(async () => {
- await loginPage.loginWith(username);
- await page.clickFavoritesAndWait();
- });
-
- afterEach(async () => {
- await Utils.pressEscape();
- });
-
- it('[C280113] Pagination control default values', async () => {
- expect(await pagination.getRange()).toContain('1-25 of 51');
- expect(await pagination.getMaxItems()).toContain('25');
- expect(await pagination.getCurrentPage()).toContain('Page 1');
- expect(await pagination.getTotalPages()).toContain('of 3');
- expect(await pagination.isPreviousEnabled()).toBe(false, 'Previous button is enabled');
- expect(await pagination.isNextEnabled()).toBe(true, 'Next button is not enabled');
- });
-
- it('[C280114] Items per page values', async () => {
- await pagination.openMaxItemsMenu();
- expect(await pagination.menu.getNthItem(1).getText()).toBe('25');
- expect(await pagination.menu.getNthItem(2).getText()).toBe('50');
- expect(await pagination.menu.getNthItem(3).getText()).toBe('100');
- await pagination.menu.closeMenu();
- });
-
- it('[C280115] current page menu items', async () => {
- await pagination.openMaxItemsMenu();
- await pagination.menu.clickMenuItem('25');
- expect(await pagination.getMaxItems()).toContain('25');
- expect(await pagination.getTotalPages()).toContain('of 3');
- await pagination.openCurrentPageMenu();
- expect(await pagination.menu.getItemsCount()).toBe(3);
- await pagination.menu.closeMenu();
-
- await pagination.openMaxItemsMenu();
- await pagination.menu.clickMenuItem('50');
- expect(await pagination.getMaxItems()).toContain('50');
- expect(await pagination.getTotalPages()).toContain('of 2');
- await pagination.openCurrentPageMenu();
- expect(await pagination.menu.getItemsCount()).toBe(2);
- await pagination.menu.closeMenu();
-
- await pagination.openMaxItemsMenu();
- await pagination.menu.clickMenuItem('100');
- expect(await pagination.getMaxItems()).toContain('100');
- expect(await pagination.getTotalPages()).toContain('of 1');
-
- await pagination.resetToDefaultPageSize();
- });
-
- it('[C280116] change the current page from menu', async () => {
- await pagination.openCurrentPageMenu();
- await pagination.menu.clickNthItem(3);
- expect(await pagination.getRange()).toContain('51-51 of 51');
- expect(await pagination.getCurrentPage()).toContain('Page 3');
- expect(await pagination.isPreviousEnabled()).toBe(true, 'Previous button is not enabled');
- expect(await pagination.isNextEnabled()).toBe(false, 'Next button is enabled');
- expect(await dataTable.isItemPresent('my-file-1')).toBe(true, 'File not found on page');
-
- await pagination.resetToDefaultPageNumber();
- });
-
- it('[C280119] navigate to next and previous pages', async () => {
- await pagination.clickNext();
- await dataTable.waitForHeader();
- expect(await pagination.getRange()).toContain('26-50 of 51');
- expect(await dataTable.isItemPresent('my-file-21')).toBe(true, 'File not found on page');
- await pagination.resetToDefaultPageNumber();
-
- await pagination.openCurrentPageMenu();
- await pagination.menu.clickNthItem(2);
- await dataTable.waitForHeader();
- await pagination.clickPrevious();
- await dataTable.waitForHeader();
- expect(await pagination.getRange()).toContain('1-25 of 51');
- expect(await dataTable.isItemPresent('my-file-50')).toBe(true, 'File not found on page');
-
- await pagination.resetToDefaultPageNumber();
- });
-
- it('[C280117] Previous button is disabled on first page', async () => {
- expect(await pagination.getCurrentPage()).toContain('Page 1');
- expect(await pagination.isPreviousEnabled()).toBe(false, 'Previous button is enabled on first page');
- });
-
- it('[C280118] Next button is disabled on last page', async () => {
- await pagination.openCurrentPageMenu();
- await pagination.menu.clickNthItem(3);
- expect(await dataTable.getRowsCount()).toBe(1, 'Incorrect number of items on the last page');
- expect(await pagination.getCurrentPage()).toContain('Page 3');
- expect(await pagination.isNextEnabled()).toBe(false, 'Next button is enabled on last page');
- });
- });
-}
diff --git a/e2e/protractor/suites/pagination/multiple-pages-files.test.ts b/e2e/protractor/suites/pagination/multiple-pages-files.test.ts
index d26b9c6f49..2aee39be8c 100644
--- a/e2e/protractor/suites/pagination/multiple-pages-files.test.ts
+++ b/e2e/protractor/suites/pagination/multiple-pages-files.test.ts
@@ -26,7 +26,6 @@ import { Utils, AdminActions, RepoClient } from '@alfresco/aca-testing-shared';
import { recentFilesTests } from './recent-files';
import { searchResultsTests } from './search-results';
import { sharedFilesTests } from './shared-files';
-import { favoritesTests } from './favorites';
describe('Pagination on multiple pages : ', () => {
const random = Utils.random();
@@ -43,7 +42,6 @@ describe('Pagination on multiple pages : ', () => {
const userApi = new RepoClient(username, username);
const adminApiActions = new AdminActions();
- let initialFavoritesTotalItems: number;
let initialSearchTotalItems: number;
beforeAll(async () => {
@@ -54,7 +52,6 @@ describe('Pagination on multiple pages : ', () => {
parentId = (await userApi.nodes.createFolder(parent)).entry.id;
filesIds = (await userApi.nodes.createFiles(files, parent)).list.entries.map((entries: any) => entries.entry.id);
- initialFavoritesTotalItems = await userApi.favorites.getFavoritesTotalItems();
await userApi.shared.shareFilesByIds(filesIds);
await userApi.favorites.addFavoritesByIds('file', filesIds);
});
@@ -83,11 +80,4 @@ describe('Pagination on multiple pages : ', () => {
});
sharedFilesTests(username);
});
-
- describe('on Favorites', () => {
- beforeAll(async () => {
- await userApi.favorites.waitForApi({ expect: initialFavoritesTotalItems + 51 });
- });
- favoritesTests(username);
- });
});
diff --git a/projects/aca-playwright-shared/src/page-objects/components/pagination.component.ts b/projects/aca-playwright-shared/src/page-objects/components/pagination.component.ts
index f458881a98..cafbcb512c 100644
--- a/projects/aca-playwright-shared/src/page-objects/components/pagination.component.ts
+++ b/projects/aca-playwright-shared/src/page-objects/components/pagination.component.ts
@@ -162,4 +162,8 @@ export class PaginationComponent extends BaseComponent {
throw new Error(`Click nth menu item catch: ${e}`);
}
}
+
+ async closeMenu(): Promise {
+ await this.page.keyboard.press('Escape');
+ }
}
diff --git a/projects/aca-playwright-shared/src/page-objects/pages/favorites.page.ts b/projects/aca-playwright-shared/src/page-objects/pages/favorites.page.ts
index 7b1ef705d8..8574042dc1 100644
--- a/projects/aca-playwright-shared/src/page-objects/pages/favorites.page.ts
+++ b/projects/aca-playwright-shared/src/page-objects/pages/favorites.page.ts
@@ -24,7 +24,7 @@
import { Page } from '@playwright/test';
import { BasePage } from './base.page';
-import { DataTableComponent, MatMenuComponent, ViewerComponent, SidenavComponent } from '../components';
+import { DataTableComponent, MatMenuComponent, ViewerComponent, SidenavComponent, PaginationComponent } from '../components';
import { AcaHeader } from '../components/aca-header.component';
import { AdfFolderDialogComponent, ViewerOverlayDialogComponent } from '../components/dialogs';
@@ -42,4 +42,9 @@ export class FavoritesPage extends BasePage {
public viewer = new ViewerComponent(this.page);
public viewerDialog = new ViewerOverlayDialogComponent(this.page);
public sidenav = new SidenavComponent(this.page);
+ public pagination = new PaginationComponent(this.page);
+
+ async waitForPageLoad() {
+ await this.page.waitForURL(`**/${FavoritesPage.pageUrl}`);
+ }
}
diff --git a/projects/aca-playwright-shared/src/utils/timeouts.ts b/projects/aca-playwright-shared/src/utils/timeouts.ts
index 8d86987f25..62a5b16be4 100644
--- a/projects/aca-playwright-shared/src/utils/timeouts.ts
+++ b/projects/aca-playwright-shared/src/utils/timeouts.ts
@@ -32,7 +32,7 @@ export const timeouts = {
large: 10000,
extraLarge: 20 * 1000,
globalTest: 45 * 1000,
- extendedTest: 120 * 1000,
+ extendedTest: 150 * 1000,
webServer: 240 * 1000,
globalSpec: 60 * 10 * 1000
};