mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-07-24 17:31:52 +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:
@@ -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();
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user