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