mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-05-19 17:14:45 +00:00
[ACS-6798] protractor to playwright e2e test suites search results libraries (#3690)
* [ACS-6798] seach results libraries migrated * [ACS-6798] added infoDrawer and search to PW tests in PRs * [ACS-6798] excluded tests + sonar fix * [ACS-6798] sonar fix 2 * [ACS-6798] sonar fix 3 * [ACS-6798] sonar fix 3 * [ACS-6798] login and delete methods added to Utils for sonar cloud duplication code * [ACS-6798] review fixes * Revert "[ci:force][auto-commit] Update dependencies ADF:6.8.0-8186121470 JS:7.7.0-8186121470 (#3693)" This reverts commit 29b1bf99d4ff8734342b94907d6bb2676a407e2e. * Revert "Release 4.4.1 (#3688)" This reverts commit 6dd3ad66d0d96054beb4f70fee5b2b550cc23efc. * [ACS-6798] review fixes pt2 * [ACS-6798] review fixes pt 3 * [ACS-6798] review fixes pt4 * [ACS-6798] review fixes pt4.1
This commit is contained in:
parent
00feb07d7d
commit
93cf1b9198
.github/workflows
e2e/playwright
info-drawer/src/tests
comments.spec.tsfile-folder-properties.spec.tsfile-preview.spec.tsgeneral.spec.tslibrary-properties.spec.ts
search
projects/aca-playwright-shared/src
4
.github/workflows/pull-request.yml
vendored
4
.github/workflows/pull-request.yml
vendored
@ -167,6 +167,10 @@ jobs:
|
||||
id: 10
|
||||
- name: "library-actions"
|
||||
id: 11
|
||||
- name: "info-drawer"
|
||||
id: 12
|
||||
- name: "search"
|
||||
id: 13
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
@ -48,20 +48,11 @@ test.describe('Info Drawer - Comments', () => {
|
||||
});
|
||||
|
||||
test.beforeEach(async ({ loginPage }) => {
|
||||
try {
|
||||
await loginPage.loginUser({ username, password: username }, { withNavigation: true, waitForLoading: true });
|
||||
} catch (error) {
|
||||
console.error(`Main beforeEach failed: ${error}`);
|
||||
}
|
||||
await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed');
|
||||
});
|
||||
|
||||
test.afterAll(async () => {
|
||||
try {
|
||||
await nodesApi.deleteCurrentUserNodes();
|
||||
await trashcanApi.emptyTrashcan();
|
||||
} catch (error) {
|
||||
console.error(`Main afterAll failed: ${error}`);
|
||||
}
|
||||
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
|
||||
});
|
||||
|
||||
test('[C299173] from Personal Files - Comments tab default fields', async ({ personalFiles }) => {
|
||||
|
@ -44,21 +44,12 @@ test.describe('Info Drawer - File Folder Properties', () => {
|
||||
}
|
||||
});
|
||||
|
||||
test.afterAll(async () => {
|
||||
try {
|
||||
await nodesApi.deleteCurrentUserNodes();
|
||||
await trashcanApi.emptyTrashcan();
|
||||
} catch (error) {
|
||||
console.error(`Main afterAll failed: ${error}`);
|
||||
}
|
||||
test.beforeEach(async ({ loginPage }) => {
|
||||
await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed');
|
||||
});
|
||||
|
||||
test.beforeEach(async ({ loginPage }) => {
|
||||
try {
|
||||
await loginPage.loginUser({ username, password: username }, { withNavigation: true, waitForLoading: true });
|
||||
} catch (error) {
|
||||
console.error(`Main beforeEach failed: ${error}`);
|
||||
}
|
||||
test.afterAll(async () => {
|
||||
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
|
||||
});
|
||||
|
||||
test('[C299162] View properties - Default tabs', async ({ personalFiles }) => {
|
||||
|
@ -23,7 +23,7 @@
|
||||
*/
|
||||
|
||||
import { expect, Page } from '@playwright/test';
|
||||
import { ApiClientFactory, test, TrashcanApi, NodesApi, FileActionsApi, TEST_FILES } from '@alfresco/playwright-shared';
|
||||
import { ApiClientFactory, test, TrashcanApi, NodesApi, FileActionsApi, TEST_FILES, Utils } from '@alfresco/playwright-shared';
|
||||
|
||||
test.describe('File preview', () => {
|
||||
const timestamp = new Date().getTime();
|
||||
@ -32,15 +32,6 @@ test.describe('File preview', () => {
|
||||
let trashcanApi: TrashcanApi;
|
||||
let fileActionsApi: FileActionsApi;
|
||||
|
||||
test.afterAll(async () => {
|
||||
try {
|
||||
await nodesApi.deleteCurrentUserNodes();
|
||||
await trashcanApi.emptyTrashcan();
|
||||
} catch (error) {
|
||||
console.error(`Main afterAll failed: ${error}`);
|
||||
}
|
||||
});
|
||||
|
||||
test.beforeAll(async () => {
|
||||
try {
|
||||
const apiClientFactory = new ApiClientFactory();
|
||||
@ -55,11 +46,11 @@ test.describe('File preview', () => {
|
||||
});
|
||||
|
||||
test.beforeEach(async ({ loginPage }) => {
|
||||
try {
|
||||
await loginPage.loginUser({ username, password: username }, { withNavigation: true, waitForLoading: true });
|
||||
} catch (error) {
|
||||
console.error(`Main beforeEach failed: ${error}`);
|
||||
}
|
||||
await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed');
|
||||
});
|
||||
|
||||
test.afterAll(async () => {
|
||||
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
|
||||
});
|
||||
|
||||
async function checkFileContent(page: Page, pageNumber: number, text: string): Promise<void> {
|
||||
|
@ -32,14 +32,6 @@ test.describe('Info Drawer - General', () => {
|
||||
|
||||
const username = `user1-${Utils.random()}`;
|
||||
|
||||
test.beforeEach(async ({ loginPage }) => {
|
||||
try {
|
||||
await loginPage.loginUser({ username, password: username }, { withNavigation: true, waitForLoading: true });
|
||||
} catch (error) {
|
||||
console.error(`beforeEach failed: ${error}`);
|
||||
}
|
||||
});
|
||||
|
||||
test.beforeAll(async () => {
|
||||
try {
|
||||
const apiClientFactory = new ApiClientFactory();
|
||||
@ -53,13 +45,12 @@ test.describe('Info Drawer - General', () => {
|
||||
}
|
||||
});
|
||||
|
||||
test.beforeEach(async ({ loginPage }) => {
|
||||
await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed');
|
||||
});
|
||||
|
||||
test.afterAll(async () => {
|
||||
try {
|
||||
await trashcanApi.emptyTrashcan();
|
||||
await nodesApi.deleteCurrentUserNodes();
|
||||
} catch (error) {
|
||||
console.error(`afterAll failed: ${error}`);
|
||||
}
|
||||
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
|
||||
});
|
||||
|
||||
test('[C268999] Info drawer closes on page refresh', async ({ personalFiles }) => {
|
||||
|
@ -43,15 +43,6 @@ test.describe('Library properties', () => {
|
||||
};
|
||||
const siteDup = `site3-${Utils.random()}`;
|
||||
|
||||
test.beforeEach(async ({ myLibrariesPage, loginPage }) => {
|
||||
try {
|
||||
await loginPage.loginUser({ username, password: username }, { withNavigation: true, waitForLoading: true });
|
||||
await myLibrariesPage.navigate();
|
||||
} catch (error) {
|
||||
console.error(` beforeEach failed: ${error}`);
|
||||
}
|
||||
});
|
||||
|
||||
test.beforeAll(async () => {
|
||||
try {
|
||||
const apiClientFactory = new ApiClientFactory();
|
||||
@ -67,8 +58,13 @@ test.describe('Library properties', () => {
|
||||
}
|
||||
});
|
||||
|
||||
test.beforeEach(async ({ loginPage, myLibrariesPage }) => {
|
||||
await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed');
|
||||
await myLibrariesPage.navigate();
|
||||
});
|
||||
|
||||
test.afterAll(async () => {
|
||||
await sitesApi.deleteSites([site.id, siteForUpdate.id, siteDup]);
|
||||
await Utils.deleteNodesSitesEmptyTrashcan(undefined, undefined, 'afterAll failed', sitesApi, [site.id, siteForUpdate.id, siteDup]);
|
||||
});
|
||||
|
||||
test('[C289336] Info drawer opens for a library', async ({ myLibrariesPage }) => {
|
||||
@ -229,7 +225,7 @@ test.describe('Non manager', () => {
|
||||
});
|
||||
|
||||
test.afterAll(async () => {
|
||||
await sitesApi.deleteSites([site.id]);
|
||||
await Utils.deleteNodesSitesEmptyTrashcan(undefined, undefined, 'afterAll failed', sitesApi, [site.id]);
|
||||
});
|
||||
|
||||
test('[C289337] Info drawer button is not displayed when user is not the library manager', async ({ loginPage, myLibrariesPage }) => {
|
||||
|
@ -1 +1,4 @@
|
||||
{}
|
||||
{
|
||||
"C290019": "https://alfresco.atlassian.net/browse/ACS-6928",
|
||||
"C290018": "https://alfresco.atlassian.net/browse/ACS-6928"
|
||||
}
|
@ -39,11 +39,7 @@ test.describe('Search - Input', () => {
|
||||
});
|
||||
|
||||
test.beforeEach(async ({ loginPage }) => {
|
||||
try {
|
||||
await loginPage.loginUser({ username, password: username }, { withNavigation: true, waitForLoading: true });
|
||||
} catch (error) {
|
||||
console.error(`beforeEach failed: ${error}`);
|
||||
}
|
||||
await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed');
|
||||
});
|
||||
|
||||
test('[C289847] Search icon is displayed in toolbar and clicking on it displays search input container', async ({ searchPage }) => {
|
||||
|
@ -37,14 +37,6 @@ test.describe('Search Results - General', () => {
|
||||
const folder = `test-folder-${random}`;
|
||||
const site = `test-site-${random}`;
|
||||
|
||||
test.beforeEach(async ({ loginPage }) => {
|
||||
try {
|
||||
await loginPage.loginUser({ username, password: username }, { withNavigation: true, waitForLoading: true });
|
||||
} catch (error) {
|
||||
console.error(`beforeEach failed: ${error}`);
|
||||
}
|
||||
});
|
||||
|
||||
test.beforeAll(async () => {
|
||||
try {
|
||||
const apiClientFactory = new ApiClientFactory();
|
||||
@ -61,13 +53,12 @@ test.describe('Search Results - General', () => {
|
||||
}
|
||||
});
|
||||
|
||||
test.beforeEach(async ({ loginPage }) => {
|
||||
await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed');
|
||||
});
|
||||
|
||||
test.afterAll(async () => {
|
||||
try {
|
||||
await trashcanApi.emptyTrashcan();
|
||||
await nodesApi.deleteCurrentUserNodes();
|
||||
} catch (error) {
|
||||
console.error(`afterAll failed: ${error}`);
|
||||
}
|
||||
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
|
||||
});
|
||||
|
||||
test('[C290005] Only files are returned when Files option is the only one checked', async ({ searchPage }) => {
|
||||
@ -75,7 +66,7 @@ test.describe('Search Results - General', () => {
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkOnlyFiles();
|
||||
await searchPage.searchInput.searchFor(`*${random}`);
|
||||
await searchPage.dataTable.body.waitFor();
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(file)).toBeTruthy();
|
||||
expect(await searchPage.dataTable.isItemPresent(folder)).toBeFalsy();
|
||||
@ -87,7 +78,7 @@ test.describe('Search Results - General', () => {
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkOnlyFolders();
|
||||
await searchPage.searchInput.searchFor(`*${random}`);
|
||||
await searchPage.dataTable.body.waitFor();
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(file)).toBeFalsy();
|
||||
expect(await searchPage.dataTable.isItemPresent(folder)).toBeTruthy();
|
||||
@ -99,7 +90,7 @@ test.describe('Search Results - General', () => {
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkFilesAndFolders();
|
||||
await searchPage.searchInput.searchFor(`*${random}`);
|
||||
await searchPage.dataTable.body.waitFor();
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(file)).toBeTruthy();
|
||||
expect(await searchPage.dataTable.isItemPresent(folder)).toBeTruthy();
|
||||
@ -111,7 +102,7 @@ test.describe('Search Results - General', () => {
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkLibraries();
|
||||
await searchPage.searchInput.searchFor(`*${random}`);
|
||||
await searchPage.dataTable.body.waitFor();
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(file)).toBeFalsy();
|
||||
expect(await searchPage.dataTable.isItemPresent(folder)).toBeFalsy();
|
||||
@ -122,14 +113,14 @@ test.describe('Search Results - General', () => {
|
||||
await searchPage.acaHeader.searchButton.click();
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.searchFor(file);
|
||||
await searchPage.dataTable.body.waitFor();
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(file)).toBeTruthy();
|
||||
expect(await searchPage.dataTable.isItemPresent(folder)).toBeFalsy();
|
||||
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.searchFor(folder);
|
||||
await searchPage.dataTable.body.waitFor();
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(file)).toBeFalsy();
|
||||
expect(await searchPage.dataTable.isItemPresent(folder)).toBeTruthy();
|
||||
@ -140,7 +131,7 @@ test.describe('Search Results - General', () => {
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkLibraries();
|
||||
await searchPage.searchInput.searchFor(site);
|
||||
await searchPage.dataTable.body.waitFor();
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(site)).toBeTruthy();
|
||||
|
||||
@ -148,7 +139,7 @@ test.describe('Search Results - General', () => {
|
||||
|
||||
await personalFiles.navigate();
|
||||
await personalFiles.page.goto(url);
|
||||
await searchPage.dataTable.body.waitFor();
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(site)).toBeTruthy();
|
||||
});
|
||||
|
237
e2e/playwright/search/src/tests/search-results-libraries.spec.ts
Normal file
237
e2e/playwright/search/src/tests/search-results-libraries.spec.ts
Normal file
@ -0,0 +1,237 @@
|
||||
/*!
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { expect } from '@playwright/test';
|
||||
import {
|
||||
ApiClientFactory,
|
||||
Utils,
|
||||
test,
|
||||
TrashcanApi,
|
||||
NodesApi,
|
||||
SitesApi,
|
||||
FileActionsApi,
|
||||
SITE_VISIBILITY,
|
||||
SITE_ROLES
|
||||
} from '@alfresco/playwright-shared';
|
||||
|
||||
test.describe('Search Results - General', () => {
|
||||
let trashcanApi: TrashcanApi;
|
||||
let nodesApi: NodesApi;
|
||||
let sitesApi: SitesApi;
|
||||
let sitesAdminApi: SitesApi;
|
||||
let fileActionsApi: FileActionsApi;
|
||||
|
||||
const username = `user-${Utils.random()}`;
|
||||
const random = Utils.random();
|
||||
const randomDescription = Utils.random() + '-' + Utils.random();
|
||||
|
||||
const site1 = {
|
||||
name: `lib-${random}-1`,
|
||||
id: `site-${random}-1`
|
||||
};
|
||||
const site2 = {
|
||||
name: `site-2-${random}`,
|
||||
id: `site-${random}-2`
|
||||
};
|
||||
const site3 = {
|
||||
name: `lib-${random}-2`,
|
||||
id: `site3-${random}`
|
||||
};
|
||||
const site4 = {
|
||||
name: `my-site-${random}`,
|
||||
id: `site4-${random}`,
|
||||
description: randomDescription
|
||||
};
|
||||
|
||||
const userSitePrivate = `user-site-${random}-private`;
|
||||
const userSiteModerated = `user-site-${random}-moderated`;
|
||||
const userSitePublic = `user-site-${random}-public`;
|
||||
|
||||
const adminSite1 = `admin-${random}-site1`;
|
||||
const adminSite2 = `admin-${random}-site2`;
|
||||
const adminSite3 = `admin-${random}-site3`;
|
||||
const adminSite4 = `admin-${random}-site4`;
|
||||
const adminPrivate = `admin-${random}-sitePrivate`;
|
||||
|
||||
const siteRussian = {
|
||||
/* cspell:disable-next-line */
|
||||
name: `любимый-сайт-${random}`,
|
||||
id: `site-russian-id-${random}`
|
||||
};
|
||||
|
||||
test.beforeEach(async ({ loginPage }) => {
|
||||
await Utils.tryLoginUser(loginPage, username, username, 'beforeEach failed');
|
||||
});
|
||||
|
||||
test.afterAll(async () => {
|
||||
await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed');
|
||||
});
|
||||
|
||||
test.beforeAll(async () => {
|
||||
try {
|
||||
const apiClientFactory = new ApiClientFactory();
|
||||
await apiClientFactory.setUpAcaBackend('admin');
|
||||
await apiClientFactory.createUser({ username });
|
||||
trashcanApi = await TrashcanApi.initialize(username, username);
|
||||
sitesApi = await SitesApi.initialize(username, username);
|
||||
fileActionsApi = await FileActionsApi.initialize(username, username);
|
||||
nodesApi = await NodesApi.initialize(username, username);
|
||||
sitesAdminApi = await SitesApi.initialize('admin');
|
||||
|
||||
await sitesApi.createSite(site1.name, null, null, site1.id);
|
||||
await sitesApi.createSite(site2.name, null, null, site2.id);
|
||||
await sitesApi.createSite(site3.name, null, null, site3.id);
|
||||
await sitesApi.createSite(site4.name, null, site4.description, site4.id);
|
||||
|
||||
await sitesApi.createSite(userSitePublic, SITE_VISIBILITY.PUBLIC);
|
||||
await sitesApi.createSite(userSiteModerated, SITE_VISIBILITY.MODERATED);
|
||||
await sitesApi.createSite(userSitePrivate, SITE_VISIBILITY.PRIVATE);
|
||||
|
||||
await sitesAdminApi.createSite(adminSite1, SITE_VISIBILITY.PUBLIC);
|
||||
await sitesAdminApi.createSite(adminSite2, SITE_VISIBILITY.PUBLIC);
|
||||
await sitesAdminApi.createSite(adminSite3, SITE_VISIBILITY.PUBLIC);
|
||||
await sitesAdminApi.createSite(adminSite4, SITE_VISIBILITY.PUBLIC);
|
||||
await sitesAdminApi.addSiteMember(adminSite1, username, SITE_ROLES.SITE_CONSUMER.ROLE);
|
||||
await sitesAdminApi.addSiteMember(adminSite2, username, SITE_ROLES.SITE_CONTRIBUTOR.ROLE);
|
||||
await sitesAdminApi.addSiteMember(adminSite3, username, SITE_ROLES.SITE_COLLABORATOR.ROLE);
|
||||
await sitesAdminApi.addSiteMember(adminSite4, username, SITE_ROLES.SITE_MANAGER.ROLE);
|
||||
|
||||
await sitesAdminApi.createSite(adminPrivate, SITE_VISIBILITY.PRIVATE);
|
||||
|
||||
await sitesApi.createSite(siteRussian.name, SITE_VISIBILITY.PUBLIC, '', siteRussian.id);
|
||||
} catch (error) {
|
||||
console.error(`beforeAll failed: ${error}`);
|
||||
}
|
||||
});
|
||||
|
||||
test('[C290012] Search library - full name match', async ({ searchPage }) => {
|
||||
await searchPage.acaHeader.searchButton.click();
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkLibraries();
|
||||
await searchPage.searchInput.searchFor(site1.name);
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(site1.name)).toBeTruthy();
|
||||
expect(await searchPage.dataTable.isItemPresent(site2.name)).toBeFalsy();
|
||||
expect(await searchPage.dataTable.isItemPresent(site3.name)).toBeFalsy();
|
||||
expect(await searchPage.dataTable.isItemPresent(site4.name)).toBeFalsy();
|
||||
});
|
||||
|
||||
test('[C290013] Search library - partial name match', async ({ searchPage }) => {
|
||||
await fileActionsApi.waitForNodes(site3.id, { expect: 1 });
|
||||
await searchPage.acaHeader.searchButton.click();
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkLibraries();
|
||||
await searchPage.searchInput.searchFor(`lib-${random}`);
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(site1.name)).toBeTruthy();
|
||||
expect(await searchPage.dataTable.isItemPresent(site2.name)).toBeFalsy();
|
||||
expect(await searchPage.dataTable.isItemPresent(site3.name)).toBeTruthy();
|
||||
expect(await searchPage.dataTable.isItemPresent(site4.name)).toBeFalsy();
|
||||
});
|
||||
|
||||
test('[C290014] Search library - description match', async ({ searchPage }) => {
|
||||
await searchPage.acaHeader.searchButton.click();
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkLibraries();
|
||||
await searchPage.searchInput.searchFor(site4.description);
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(site1.name)).toBeFalsy();
|
||||
expect(await searchPage.dataTable.isItemPresent(site2.name)).toBeFalsy();
|
||||
expect(await searchPage.dataTable.isItemPresent(site3.name)).toBeFalsy();
|
||||
expect(await searchPage.dataTable.isItemPresent(site4.name)).toBeTruthy();
|
||||
});
|
||||
|
||||
test('[C290016] Results page columns', async ({ searchPage }) => {
|
||||
await searchPage.acaHeader.searchButton.click();
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkLibraries();
|
||||
await searchPage.searchInput.searchFor(site1.name);
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
const expectedColumns = ['Name', 'Description', 'My Role', 'Visibility'];
|
||||
const actualColumns = await searchPage.dataTable.getColumnHeaders();
|
||||
|
||||
expect(actualColumns).toEqual(expectedColumns);
|
||||
});
|
||||
|
||||
test('[C290017] Library visibility is correctly displayed', async ({ searchPage }) => {
|
||||
await searchPage.acaHeader.searchButton.click();
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkLibraries();
|
||||
await searchPage.searchInput.searchFor(`user-site-${random}`);
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
const expectedSitesVisibility = {
|
||||
[userSitePrivate]: SITE_VISIBILITY.PRIVATE,
|
||||
[userSiteModerated]: SITE_VISIBILITY.MODERATED,
|
||||
[userSitePublic]: SITE_VISIBILITY.PUBLIC
|
||||
};
|
||||
|
||||
const actualSitesVisibility = await searchPage.dataTable.getSitesNameAndVisibility();
|
||||
|
||||
expect(expectedSitesVisibility).toEqual(actualSitesVisibility);
|
||||
});
|
||||
|
||||
test('[C290018] User role is correctly displayed', async ({ searchPage }) => {
|
||||
await searchPage.acaHeader.searchButton.click();
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkLibraries();
|
||||
await searchPage.searchInput.searchFor(`admin-${random}-site`);
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
const expectedSitesRoles = {
|
||||
[adminSite1]: SITE_ROLES.SITE_CONSUMER.LABEL,
|
||||
[adminSite2]: SITE_ROLES.SITE_CONTRIBUTOR.LABEL,
|
||||
[adminSite3]: SITE_ROLES.SITE_COLLABORATOR.LABEL,
|
||||
[adminSite4]: SITE_ROLES.SITE_MANAGER.LABEL
|
||||
};
|
||||
|
||||
const actualSitesRole = await searchPage.dataTable.getSitesNameAndRole();
|
||||
|
||||
expect(expectedSitesRoles).toEqual(actualSitesRole);
|
||||
});
|
||||
|
||||
test('[C290019] Private sites are not displayed when user is not a member', async ({ searchPage }) => {
|
||||
await searchPage.acaHeader.searchButton.click();
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkLibraries();
|
||||
await searchPage.searchInput.searchFor(`admin-${random}-site`);
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(adminPrivate)).toBeFalsy();
|
||||
});
|
||||
|
||||
test('[C290028] Search libraries with special characters', async ({ searchPage }) => {
|
||||
await searchPage.acaHeader.searchButton.click();
|
||||
await searchPage.searchInput.searchButton.click();
|
||||
await searchPage.searchInput.checkLibraries();
|
||||
await searchPage.searchInput.searchFor(siteRussian.name);
|
||||
await searchPage.dataTable.waitForTable();
|
||||
|
||||
expect(await searchPage.dataTable.isItemPresent(siteRussian.name)).toBeTruthy();
|
||||
});
|
||||
});
|
@ -52,6 +52,9 @@ export class DataTableComponent extends BaseComponent {
|
||||
emptyListTest = this.getChild('adf-custom-empty-content-template');
|
||||
paginationButton = this.page.locator('.adf-pagination__block button').nth(0);
|
||||
paginationOptions = this.page.locator('#cdk-overlay-0 button');
|
||||
sitesVisibility = this.page.locator('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="Visibility"]');
|
||||
sitesName = this.page.locator('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="Name"]');
|
||||
sitesRole = this.page.locator('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="My Role"]');
|
||||
|
||||
/** Locator for row (or rows) */
|
||||
getRowLocator = this.getChild(`adf-datatable-row`);
|
||||
@ -327,4 +330,47 @@ export class DataTableComponent extends BaseComponent {
|
||||
await this.paginationButton.click();
|
||||
await this.paginationOptions.getByText("50").click();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used to create objects from names and visibility of sites from datatable
|
||||
*
|
||||
* @returns an object with sites' names and their corresponding visibility values
|
||||
*/
|
||||
async getSitesNameAndVisibility(): Promise<{ [siteName: string]: string }> {
|
||||
const rowsCount = await this.sitesName.count();
|
||||
let sitesInfo: { [siteName: string]: string } = {};
|
||||
for (let i = 0; i < rowsCount; i++) {
|
||||
let siteVisibilityText = await this.sitesVisibility.nth(i).textContent();
|
||||
let siteNameText = await this.sitesName.nth(i).textContent();
|
||||
siteVisibilityText = siteVisibilityText.trim().toUpperCase();
|
||||
siteNameText = siteNameText.trim();
|
||||
sitesInfo[siteNameText] = siteVisibilityText;
|
||||
}
|
||||
return sitesInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used to create objects from names and roles of sites from datatable
|
||||
*
|
||||
* @returns an object with sites' names and their corresponding role values
|
||||
*/
|
||||
async getSitesNameAndRole(): Promise<{ [siteName: string]: string }> {
|
||||
const rowsCount = await this.sitesName.count();
|
||||
let sitesInfo: { [siteName: string]: string } = {};
|
||||
for (let i = 0; i < rowsCount; i++) {
|
||||
let siteNameText = await this.sitesName.nth(i).textContent();
|
||||
let siteRoleText = await this.sitesRole.nth(i).textContent();
|
||||
siteNameText = siteNameText.trim();
|
||||
siteRoleText = siteRoleText.trim();
|
||||
sitesInfo[siteNameText] = siteRoleText;
|
||||
}
|
||||
return sitesInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used to wait for values to be loaded in the table
|
||||
*/
|
||||
async waitForTable(): Promise<void> {
|
||||
await this.getRowLocator.nth(0).waitFor({timeout:5000});
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,8 @@
|
||||
*/
|
||||
|
||||
const crypto = require('crypto');
|
||||
import { LoginPage } from '../';
|
||||
import { NodesApi, TrashcanApi, SitesApi } from '@alfresco/playwright-shared';
|
||||
|
||||
export class Utils {
|
||||
|
||||
@ -46,4 +48,43 @@ export class Utils {
|
||||
static formatDate(date: string): string {
|
||||
return new Date(date).toLocaleDateString('en-US');
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used to login user with navigation. Also waits for the page to load after login
|
||||
*
|
||||
* @param loginPage page context passed from the test
|
||||
* @param username username string
|
||||
* @param password password string
|
||||
* @param errorMessage error message string if the login fails
|
||||
*
|
||||
*/
|
||||
static async tryLoginUser(loginPage: LoginPage, username: string, password: string, errorMessage = 'Error '): Promise<void> {
|
||||
try {
|
||||
await loginPage.loginUser({ username, password }, { withNavigation: true, waitForLoading: true });
|
||||
} catch (error) {
|
||||
console.error(`${errorMessage}: ${error}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used to delete nodes and sites from user's account
|
||||
*
|
||||
* @param nodesApi nodesApi initialized with user credentials passed from the test
|
||||
* @param trashcanApi trashcanApi initialized with user credentials passed from the test
|
||||
* @param errorMessage error message string if the deleting sites/nodes fails
|
||||
* @param sitesApi sitesApi initialized with user credentials passed from the test
|
||||
* @param sitesToDelete array of sites' ids
|
||||
*
|
||||
*/
|
||||
static async deleteNodesSitesEmptyTrashcan(nodesApi?: NodesApi, trashcanApi?: TrashcanApi, errorMessage = 'Error ', sitesApi?: SitesApi, sitesToDelete?: string[]): Promise<void> {
|
||||
try {
|
||||
await nodesApi?.deleteCurrentUserNodes();
|
||||
await trashcanApi?.emptyTrashcan();
|
||||
if (sitesToDelete?.length > 0) {
|
||||
await sitesApi?.deleteSites(sitesToDelete);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`${errorMessage}: ${error}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user