diff --git a/e2e/playwright/search/src/tests/search-highlighting.e2e.ts b/e2e/playwright/search/src/tests/search-highlighting.e2e.ts index 96ce7914d..0ae829daf 100644 --- a/e2e/playwright/search/src/tests/search-highlighting.e2e.ts +++ b/e2e/playwright/search/src/tests/search-highlighting.e2e.ts @@ -57,7 +57,7 @@ test.describe('Search Highlighting', () => { await fileActionsApi.waitForNodesSearchHighlight(fileContentHighlight, { expect: 1 }); } catch (error) { - console.error(`beforeAll failed: ${error}`); + console.error(`beforeAll failed: ${JSON.stringify(error)}`); } }); @@ -78,7 +78,12 @@ test.describe('Search Highlighting', () => { test('[XAT-17121] Matching phrases should be highlighted in the file content for search results', async ({ searchPage, personalFiles }) => { await personalFiles.navigate(); - await searchPage.searchWithin(fileContent, 'files'); + await searchPage.searchWithin(`${fileContent}`, 'files'); + await searchPage.searchFilters.dateFilter.click(); + await searchPage.searchFiltersDate.inTheLastRadioButton.click(); + await searchPage.searchFiltersDate.quantityInput.fill('1'); + await searchPage.searchMenuCard.menuCardApply.click(); + await searchPage.spinnerWaitForReload(); expect(await searchPage.dataTable.hasHighlightedText('content')).toBe(true); expect(await searchPage.dataTable.hasHighlightedText('name')).toBe(false); }); diff --git a/e2e/playwright/search/src/tests/search-results-libraries.e2e.ts b/e2e/playwright/search/src/tests/search-results-libraries.e2e.ts index c7543d926..f91e06042 100644 --- a/e2e/playwright/search/src/tests/search-results-libraries.e2e.ts +++ b/e2e/playwright/search/src/tests/search-results-libraries.e2e.ts @@ -192,8 +192,6 @@ test.describe('Search Results - General', () => { }); test('[XAT-5600] User role is correctly displayed', async ({ searchPage }) => { - await searchPage.searchWithin(`admin-${random}-site`, 'libraries'); - const expectedSitesRoles = { [adminSite1]: SITE_ROLES.SITE_CONSUMER.LABEL, [adminSite2]: SITE_ROLES.SITE_CONTRIBUTOR.LABEL, @@ -201,6 +199,8 @@ test.describe('Search Results - General', () => { [adminSite4]: SITE_ROLES.SITE_MANAGER.LABEL }; + await searchPage.searchWithin(`admin-${random}-site`, 'libraries'); + const actualSitesRole = await searchPage.dataTable.getSitesNameAndRole(); expect(expectedSitesRoles).toEqual(actualSitesRole); diff --git a/package-lock.json b/package-lock.json index 1d2515fc8..2d794acef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,11 @@ "version": "8.0.0", "license": "LGPL-3.0", "dependencies": { - "@alfresco/adf-content-services": "9.1.0-27546365624", - "@alfresco/adf-core": "9.1.0-27546365624", - "@alfresco/adf-extensions": "9.1.0-27546365624", - "@alfresco/eslint-plugin-eslint-angular": "9.1.0-27546365624", - "@alfresco/js-api": "10.1.0-27546365624", + "@alfresco/adf-content-services": "9.1.0-27608429044", + "@alfresco/adf-core": "9.1.0-27608429044", + "@alfresco/adf-extensions": "9.1.0-27608429044", + "@alfresco/eslint-plugin-eslint-angular": "9.1.0-27608429044", + "@alfresco/js-api": "10.1.0-27608429044", "@angular/animations": "19.2.20", "@angular/cdk": "19.2.19", "@angular/common": "19.2.20", @@ -45,7 +45,7 @@ "zone.js": "0.15.0" }, "devDependencies": { - "@alfresco/adf-cli": "9.1.0-27546365624", + "@alfresco/adf-cli": "9.1.0-27608429044", "@angular-devkit/build-angular": "19.2.22", "@angular-devkit/core": "19.2.20", "@angular-devkit/schematics": "19.2.20", @@ -102,13 +102,13 @@ } }, "node_modules/@alfresco/adf-cli": { - "version": "9.1.0-27546365624", - "resolved": "https://registry.npmjs.org/@alfresco/adf-cli/-/adf-cli-9.1.0-27546365624.tgz", - "integrity": "sha512-Ip/Qm9HeaAt1AoXnLaU92LUk1b95ikkv7jTn3ddHZZ6kgQ9bwKwd9+6OlPGoqmIeXJ9b5Khg13M8Pn4C8MJ1Ng==", + "version": "9.1.0-27608429044", + "resolved": "https://registry.npmjs.org/@alfresco/adf-cli/-/adf-cli-9.1.0-27608429044.tgz", + "integrity": "sha512-Yu7/LQDSShU1ONwJ18u2XuJue7vo19KY0ydh7w88az78JeUnGIrZUen67Fnvu61Q9rrfIjLztTTI8DQMoadkNQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@alfresco/js-api": ">=10.1.0-27546365624", + "@alfresco/js-api": ">=10.1.0-27608429044", "ejs": "^3.1.10", "node-fetch": "^2.7.0", "spdx-license-list": "^5.0.0" @@ -119,16 +119,16 @@ } }, "node_modules/@alfresco/adf-content-services": { - "version": "9.1.0-27546365624", - "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-9.1.0-27546365624.tgz", - "integrity": "sha512-ahYdKu0aimfeo3xTIjDJsAh16gdj/54ZGRdzpTEXHOGANXQK0p3avxXXT2uxIQ8PYWWpuVQFPvkYOCF2qpxKsQ==", + "version": "9.1.0-27608429044", + "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-9.1.0-27608429044.tgz", + "integrity": "sha512-2MOhRTPzEAQWr5qyD5JA4L+9fTzvW0tEsDFybQgB9TmptZGFLvos4TXIPpuFhU6HUOvSlrvd+DZKXkEBX85Rgw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@alfresco/adf-core": ">=9.1.0-27546365624", - "@alfresco/js-api": ">=10.1.0-27546365624", + "@alfresco/adf-core": ">=9.1.0-27608429044", + "@alfresco/js-api": ">=10.1.0-27608429044", "@angular/animations": ">=14.1.3", "@angular/cdk": ">=14.1.2", "@angular/common": ">=14.1.3", @@ -143,9 +143,9 @@ } }, "node_modules/@alfresco/adf-core": { - "version": "9.1.0-27546365624", - "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-9.1.0-27546365624.tgz", - "integrity": "sha512-06/YE+nxz7KzFiCPhz4Mf/I7hQ2Hl2U/PL9m66J7k69wCWJc/NEmcQNTgLeKr9wB8a9u58qluh6+szPQFLWoCQ==", + "version": "9.1.0-27608429044", + "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-9.1.0-27608429044.tgz", + "integrity": "sha512-1aWnCRYDQF8F3JvjavuJuSngZrligLFQKuLphREfDSkDbhYLIgpOTZKKz0bbIudtSsWquvRksNIL33SgutCW6w==", "license": "Apache-2.0", "peer": true, "dependencies": { @@ -155,8 +155,8 @@ "tslib": "^2.3.0" }, "peerDependencies": { - "@alfresco/adf-extensions": ">=9.1.0-27546365624", - "@alfresco/js-api": ">=10.1.0-27546365624", + "@alfresco/adf-extensions": ">=9.1.0-27608429044", + "@alfresco/js-api": ">=10.1.0-27608429044", "@angular/animations": ">=16.0.0", "@angular/cdk": ">=16.0.0", "@angular/common": ">=16.0.0", @@ -195,30 +195,30 @@ } }, "node_modules/@alfresco/adf-extensions": { - "version": "9.1.0-27546365624", - "resolved": "https://registry.npmjs.org/@alfresco/adf-extensions/-/adf-extensions-9.1.0-27546365624.tgz", - "integrity": "sha512-9afPa76Om49xY5FNbsTIgtij6N9MAq3JDyVTwIuY+39TxOsvC/+VeiQ8k2g7xH8zTgFYNoebl6HL56IoFjfOyQ==", + "version": "9.1.0-27608429044", + "resolved": "https://registry.npmjs.org/@alfresco/adf-extensions/-/adf-extensions-9.1.0-27608429044.tgz", + "integrity": "sha512-lc5pmsLM4LHhjdJ9/eiLSp8eMU3R9eF2eL8BpsFC1bfTs1IlYu5mBEFkHVZwG8xU1Jx9lFXolhhA524k9cVwJQ==", "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@alfresco/js-api": ">=10.1.0-27546365624", + "@alfresco/js-api": ">=10.1.0-27608429044", "@angular/common": ">=14.1.3", "@angular/core": ">=14.1.3" } }, "node_modules/@alfresco/eslint-plugin-eslint-angular": { - "version": "9.1.0-27546365624", - "resolved": "https://registry.npmjs.org/@alfresco/eslint-plugin-eslint-angular/-/eslint-plugin-eslint-angular-9.1.0-27546365624.tgz", - "integrity": "sha512-8k5FHvo8H1N0ov8DcEmHN1rby4gpJf1bsgBapVBuGUipfeNVJqrfqiXBRXPuvCC8QIQscr5QkXXU7pn+dbCFcg==", + "version": "9.1.0-27608429044", + "resolved": "https://registry.npmjs.org/@alfresco/eslint-plugin-eslint-angular/-/eslint-plugin-eslint-angular-9.1.0-27608429044.tgz", + "integrity": "sha512-j/X53l78rX1vZfoHj0GSju7E3bjub2phAIjMxhdnblIx5PjM5RBDD29m56LMbGrfQm+fpPHre7UHqELOLVW+Cg==", "license": "Apache-2.0" }, "node_modules/@alfresco/js-api": { - "version": "10.1.0-27546365624", - "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-10.1.0-27546365624.tgz", - "integrity": "sha512-ut3ONuKqeWlbxFDC/4eam09o5/L77DNcT456S3U4GTnEyAp3mm1jYBGPp/6bqgQC+CcPmJZ9VyE5OnQUaUDUxA==", + "version": "10.1.0-27608429044", + "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-10.1.0-27608429044.tgz", + "integrity": "sha512-TpDLmK/SPM0iAZ4yzlFF8aUX91FwGCaV0eQ9YKhthp5YevUmoYME7GYCtdlkboete7YPRu0yIALGAZd3Mg+m4Q==", "license": "Apache-2.0", "peer": true, "dependencies": { diff --git a/package.json b/package.json index 5b7dd64c7..f539e737d 100644 --- a/package.json +++ b/package.json @@ -42,11 +42,11 @@ }, "private": true, "dependencies": { - "@alfresco/adf-content-services": "9.1.0-27546365624", - "@alfresco/adf-core": "9.1.0-27546365624", - "@alfresco/adf-extensions": "9.1.0-27546365624", - "@alfresco/eslint-plugin-eslint-angular": "9.1.0-27546365624", - "@alfresco/js-api": "10.1.0-27546365624", + "@alfresco/adf-content-services": "9.1.0-27608429044", + "@alfresco/adf-core": "9.1.0-27608429044", + "@alfresco/adf-extensions": "9.1.0-27608429044", + "@alfresco/eslint-plugin-eslint-angular": "9.1.0-27608429044", + "@alfresco/js-api": "10.1.0-27608429044", "@angular/animations": "19.2.20", "@angular/cdk": "19.2.19", "@angular/common": "19.2.20", @@ -78,7 +78,7 @@ "zone.js": "0.15.0" }, "devDependencies": { - "@alfresco/adf-cli": "9.1.0-27546365624", + "@alfresco/adf-cli": "9.1.0-27608429044", "@angular-devkit/build-angular": "19.2.22", "@angular-devkit/core": "19.2.20", "@angular-devkit/schematics": "19.2.20", diff --git a/projects/aca-playwright-shared/src/api/api-client-factory.ts b/projects/aca-playwright-shared/src/api/api-client-factory.ts index 380eb40b5..a9b4bc00e 100644 --- a/projects/aca-playwright-shared/src/api/api-client-factory.ts +++ b/projects/aca-playwright-shared/src/api/api-client-factory.ts @@ -138,7 +138,7 @@ export class ApiClientFactory { try { await this.alfrescoApi.login(user, userPassword); } catch (error) { - logger.error(`[API Client Factory] Log in user ${user} failed ${error}`); + logger.error(`[API Client Factory] Log in user ${user} failed ${JSON.stringify(error)}`); throw error; } } @@ -166,7 +166,7 @@ export class ApiClientFactory { logger.warn(`[API Client Factory] createUser: user "${user.username}" already exists, skipping creation`); return null; } - logger.error(`[API Client Factory] createUser failed: ${error}`); + logger.error(`[API Client Factory] createUser failed: ${JSON.stringify(error)}`); throw error; } } @@ -177,7 +177,7 @@ export class ApiClientFactory { try { return await peopleApi.updatePerson(username, { password: newPassword }); } catch (error) { - logger.error(`[API Client Factory] changePassword failed: ${error}`); + logger.error(`[API Client Factory] changePassword failed: ${JSON.stringify(error)}`); return null; } } diff --git a/projects/aca-playwright-shared/src/api/file-actions.ts b/projects/aca-playwright-shared/src/api/file-actions.ts index fd8fb9397..e0d03fb8e 100644 --- a/projects/aca-playwright-shared/src/api/file-actions.ts +++ b/projects/aca-playwright-shared/src/api/file-actions.ts @@ -37,7 +37,7 @@ async function toUploadFile(fileLocation: string): Promise { buffer = await fs.promises.readFile(fileLocation); fileFixtureCache.set(fileLocation, buffer); } - return new NodeFile([buffer], path.basename(fileLocation)); + return new NodeFile([new Uint8Array(buffer)], path.basename(fileLocation)); } export class FileActionsApi { @@ -239,7 +239,7 @@ export class FileActionsApi { try { return (await this.queryNodesSearchHighlight(searchTerm)).list?.pagination?.totalItems || 0; } catch (error) { - logger.warn(`queryNodesSearchHighlight failed for "${searchTerm}": ${error}`); + logger.warn(`queryNodesSearchHighlight failed for "${searchTerm}": ${JSON.stringify(error)}`); return 0; } }; @@ -248,7 +248,7 @@ export class FileActionsApi { await waitForApi(apiCall, predicate, 30, 2500); logger.log(`waitForNodesSearchHighlight: Found ${data.expect} nodes with search term "${searchTerm}"`); } catch (error) { - logger.error(`Error: ${error}`); + logger.error(`Error: ${JSON.stringify(error)}`); } } @@ -263,7 +263,7 @@ export class FileActionsApi { } return await this.apiService.nodes.updateNodeContent(nodeId, content as unknown as string, opts); // NOSONAR } catch (error) { - logger.error(`${this.constructor.name} ${this.updateNodeContent.name}: ${error}`); + logger.error(`${this.constructor.name} ${this.updateNodeContent.name}: ${JSON.stringify(error)}`); return Promise.reject(error); } } diff --git a/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-date.component.ts b/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-date.component.ts index 9811997e4..34fa5d3f0 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-date.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-date.component.ts @@ -41,6 +41,8 @@ export class SearchFiltersDate extends BaseComponent { public anytimeRadioButton = this.anytimeButton.locator(`input`); public betweenButton = this.getChild(`[data-automation-id$='date-range-between']`); public betweenRadioButton = this.betweenButton.locator(`input`); + public inTheLastRadioButton = this.getChild(`[data-automation-id="date-range-in-last"]`); + public quantityInput = this.getChild(`[data-automation-id="date-range-in-last-input"]`); async openCreatedModifiedTab(page: SearchPage, tab: FilterTab): Promise { switch (tab) { diff --git a/projects/aca-playwright-shared/src/page-objects/playwright-base.ts b/projects/aca-playwright-shared/src/page-objects/playwright-base.ts index f2461e24f..d39df1770 100644 --- a/projects/aca-playwright-shared/src/page-objects/playwright-base.ts +++ b/projects/aca-playwright-shared/src/page-objects/playwright-base.ts @@ -38,5 +38,11 @@ export abstract class PlaywrightBase { const spinner = this.page.locator('[role="progressbar"]'); await spinner.waitFor({ state: 'attached', timeout: timeouts.medium }).catch(() => {}); await spinner.waitFor({ state: 'detached', timeout: timeouts.normal }).catch(() => {}); + if (await spinner.first().isVisible()) { + await spinner + .first() + .waitFor({ state: 'detached', timeout: timeouts.normal }) + .catch(() => {}); + } } }