[ACS-9102] Local ACS deployment for E2Es (#4324)

* [ACS-9102] Local ACS deployment draft

* [ACS-9102] Move ACS deployment to composite action

* [ACS-9102] Remove obsolete checks

* [ACS-9102] Proper secrets for ACS deployment

* [ACS-9102] Add required shell property

* [ACS-9102] Use fixed acs deployment version

* [ACS-9102] Proper acs deployment tag

* [ACS-9102] Add required shell property

* [ACS-9102] Fix helm install params

* [ACS-9102] Remove obsolete checkout

* [ACS-9102] Use more powerful runner for E2Es

* [ACS-9102] Introduce temp secrets

* test curl localhost

* skip n-1 matrix jobs

* test ipv4 first

* [ACS-9102] Adjust Playwright E2E host

* [ACS-9102] Bring back matrix job

* disable unnecessary acs components

* debug ingress after tests run

* [ACS-9102] Fix folder-rules test suite

* [ACS-9102] Fix part of viewer test suite

* [ACS-9102] Additional E2E fixes

* [ACS-9102] fixes for e2es -> empty-list and search

* [ACS-9102] more fixes for e2es and github actions artifacts added for easier debugging

* [ACS-9102] removed artifacts from GHA

* print all logs

* [ACS-9102] Remove outdated secrets

* [ACS-9102] Remove after-e2e action

* do not wait for reindexing

* test on latest runner

* Always debug ingress logs

* avoid sleep waiting for app startup

* cleanup unnecessary action input type

* fixup indent

* test with latest acs alpha

* Revert "do not wait for reindexing"

This reverts commit 86ca54de33a6b5bf1da65202caac5798b5f88d51.

* [ACS-9102] Exclude unstable test cases

* [ACS-9102] Exclude unstable test cases

* [ACS-9102] Exclude unstable test cases

---------

Co-authored-by: Giovanni Toraldo <giovanni.toraldo@hyland.com>
Co-authored-by: Adam Świderski <adam.tomasz.swiderski@gmail.com>
This commit is contained in:
MichalKinas
2025-01-15 11:34:03 +01:00
committed by GitHub
parent 52d586afe0
commit 8931a295c6
27 changed files with 363 additions and 190 deletions

View File

@@ -147,19 +147,19 @@ export class RulesApi {
{
actionDefinitionId: 'add-features',
params: {
'aspect-name': 'sc:controlsAreClearance'
'aspect-name': 'cm:auditable'
}
},
{
actionDefinitionId: 'add-features',
params: {
'aspect-name': 'sfdc:objectModel'
'aspect-name': 'app:configurable'
}
},
{
actionDefinitionId: 'add-features',
params: {
'aspect-name': 'sfdc:folder'
'aspect-name': 'exif:exif'
}
}
]
@@ -224,10 +224,6 @@ export class ActionTypes {
actionDefinitionId: 'specialise-type',
params: { 'type-name': 'sys:base' }
});
static readonly RECORDABLEVERSION = new ActionTypes('RECORDABLEVERSION', {
actionDefinitionId: 'recordable-version-config',
params: { version: 'ALL' }
});
static readonly SETPROPERTYVALUE = new ActionTypes('SETPROPERTYVALUE', {
actionDefinitionId: 'set-property-value',
params: { property: 'dl:ganttPercentComplete', value: 'test' }
@@ -235,7 +231,6 @@ export class ActionTypes {
static readonly actions = [
ActionTypes.ADDFEATURES.value,
ActionTypes.CHECKIN.value,
ActionTypes.RECORDABLEVERSION.value,
ActionTypes.SPECIALISETYPE.value,
ActionTypes.SETPROPERTYVALUE.value
];

View File

@@ -60,6 +60,7 @@ export class ActionsDropdownComponent extends BaseComponent {
private actionAspectNameLocator = '[data-automation-id="header-aspect-name"] .adf-property-field';
private actionCheckInInputLocator = '[data-automation-id="header-description"] input';
private actionAutoDeclareLocator = '[data-automation-id="header-version"] mat-select';
private actionSpecialiseTypeLocator = '[data-automation-id="header-type-name"] mat-select';
private actionSimpleWorkflowStepInputLocator = '[data-automation-id="header-approve-step"] input';
private actionSimpleWorkflowApproveFolderLocator = `[data-automation-id="header-approve-folder"] mat-icon`;
private actionSimpleWorkflowActionChoiceLocator = '[data-automation-id="content-node-selector-actions-choose"]';
@@ -98,6 +99,10 @@ export class ActionsDropdownComponent extends BaseComponent {
await this.dropdownSelection(autoDeclareOptionsValue, this.actionAutoDeclareLocator, index);
}
async insertSpecialiseTypeActionValues(specialiseTypeValue: string, index: number): Promise<void> {
await this.dropdownSelection(specialiseTypeValue, this.actionSpecialiseTypeLocator, index);
}
async insertSimpleWorkflowActionValues(stepValue: string, index: number): Promise<void> {
await this.ruleActionLocator.nth(index).locator(this.actionSimpleWorkflowStepInputLocator).fill(stepValue);
await this.ruleActionLocator.nth(index).locator(this.actionSimpleWorkflowApproveFolderLocator).click();

View File

@@ -61,7 +61,7 @@ export class ViewerComponent extends BaseComponent {
async waitForViewerToOpen(waitForViewerContent?: 'wait for viewer content'): Promise<void> {
await this.viewerLocator.waitFor({ state: 'visible', timeout: timeouts.medium });
if (waitForViewerContent) {
await this.spinnerWaitForReload();
await this.waitForViewerLoaderToFinish();
}
}
@@ -94,6 +94,7 @@ export class ViewerComponent extends BaseComponent {
async getFileTitle(): Promise<string> {
await this.fileTitleButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal });
await this.waitForViewerLoaderToFinish();
return this.fileTitleButtonLocator.textContent();
}

View File

@@ -179,4 +179,19 @@ export class Utils {
static trimArrayElements(arr: string[]): string[] {
return arr.map((element) => element.trim());
}
/**
* Waits for a specific API response.
*
* @param page - The Playwright page object.
* @param urlSubstring - The substring to look for in the URL.
* @param statusCode - The expected status code of the response.
*/
static async waitForApiResponse(
contentPage: LoginPage | MyLibrariesPage | PersonalFilesPage | FavoritesLibrariesPage | SearchPage | SharedPage | TrashPage,
urlSubstring: string,
statusCode: number
) {
await contentPage.page.waitForResponse((response) => response.url().includes(urlSubstring) && response.status() === statusCode);
}
}