mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-07-24 17:31:52 +00:00
[ACS-5343] refactor Playwright framework in ACA (#3261)
* [ACS-5343] refactor Playwright framework in ACA * Add the tests for Actions, from the Adam PR [ACS-5328] * Small fixes * Improve logs * [ACS-5343] adding-goThroughPages-and-delete * [ACS-5343] added git changes * [ACS-5343] added git changes for playwright * [ACS-5343] fix for e2e * [ACS-5343] e2e protractor path fix * remove import * [ACS-5343] e2e playwright user fix * [ACS-5343] e2e playwright user ids fix * [ACS-5343] e2e playwright users ids fix * changes for git * fix playwright test run * tsconfig path fix * playwright action yml added * retrigger checks * add test id from testrail * merge conflits * fix gha * fix credentials --------- Co-authored-by: adam.zakrzewski <adam.zakrzewski@hyland.com> Co-authored-by: akash.rathod@hyland.com <akash.rathod@hyland.com> Co-authored-by: Denys Vuika <denys.vuika@gmail.com>
This commit is contained in:
138
projects/aca-playwright-shared/src/api/api-client-factory.ts
Normal file
138
projects/aca-playwright-shared/src/api/api-client-factory.ts
Normal file
@@ -0,0 +1,138 @@
|
||||
/*!
|
||||
* 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 {
|
||||
AdminTenantsApi,
|
||||
AdminUsersApi,
|
||||
AlfrescoApi,
|
||||
ContentClient,
|
||||
GroupsApi,
|
||||
NodesApi,
|
||||
PeopleApi,
|
||||
QueriesApi,
|
||||
SearchApi,
|
||||
SecurityGroupsApi,
|
||||
SecurityMarksApi,
|
||||
SitesApi,
|
||||
UploadApi
|
||||
} from '@alfresco/js-api';
|
||||
import { logger } from '@alfresco/adf-cli/scripts/logger';
|
||||
import { ActionTypes, Rule } from './rules-api';
|
||||
import { users } from '../base-config';
|
||||
|
||||
export interface AcaBackend {
|
||||
sites: SitesApi;
|
||||
upload: UploadApi;
|
||||
nodes: NodesApi;
|
||||
|
||||
tearDown(): Promise<any>;
|
||||
}
|
||||
|
||||
const config = {
|
||||
authType: process.env.APP_CONFIG_AUTH_TYPE,
|
||||
hostBpm: process.env.APP_CONFIG_BPM_HOST,
|
||||
hostEcm: process.env.APP_CONFIG_ECM_HOST,
|
||||
provider: process.env.APP_CONFIG_PROVIDER,
|
||||
contextRoot: 'alfresco'
|
||||
};
|
||||
|
||||
export class ApiClientFactory {
|
||||
public alfrescoApi: AlfrescoApi;
|
||||
public sites: SitesApi;
|
||||
public upload: UploadApi;
|
||||
public nodes: NodesApi;
|
||||
public people: PeopleApi;
|
||||
public adminUsers: AdminUsersApi;
|
||||
public adminTenant: AdminTenantsApi;
|
||||
public groups: GroupsApi;
|
||||
public queries: QueriesApi;
|
||||
public search: SearchApi;
|
||||
public securityGroupsApi: SecurityGroupsApi;
|
||||
public securityMarksApi: SecurityMarksApi;
|
||||
public contentClient: ContentClient;
|
||||
|
||||
constructor() {
|
||||
this.alfrescoApi = new AlfrescoApi(config);
|
||||
}
|
||||
|
||||
public async setUpAcaBackend(userProfile: keyof typeof users): Promise<AcaBackend> {
|
||||
await this.login(userProfile);
|
||||
|
||||
this.sites = new SitesApi(this.alfrescoApi);
|
||||
this.upload = new UploadApi(this.alfrescoApi);
|
||||
this.nodes = new NodesApi(this.alfrescoApi);
|
||||
this.people = new PeopleApi(this.alfrescoApi);
|
||||
this.adminUsers = new AdminUsersApi(this.alfrescoApi);
|
||||
this.adminTenant = new AdminTenantsApi(this.alfrescoApi);
|
||||
this.groups = new GroupsApi(this.alfrescoApi);
|
||||
this.queries = new QueriesApi(this.alfrescoApi);
|
||||
this.search = new SearchApi(this.alfrescoApi);
|
||||
this.securityGroupsApi = new SecurityGroupsApi(this.alfrescoApi);
|
||||
this.securityMarksApi = new SecurityMarksApi(this.alfrescoApi);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
async tearDown(): Promise<ApiClientFactory> {
|
||||
await this.alfrescoApi.logout();
|
||||
return this;
|
||||
}
|
||||
|
||||
private callApi(path: string, httpMethod: string, body: object = {}): Promise<any> {
|
||||
// APIs used by this service are still private and not yet available for public use
|
||||
const params = [{}, {}, {}, {}, body, ['application/json'], ['application/json']];
|
||||
return this.alfrescoApi.contentPrivateClient.callApi(path, httpMethod, ...params);
|
||||
}
|
||||
|
||||
async createRule(nodeId: string, rule: Partial<Rule>, ruleSetId: string = '-default-'): Promise<Rule> {
|
||||
const response = await this.callApi(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules`, 'POST', { ...rule });
|
||||
return response.entry;
|
||||
}
|
||||
|
||||
async createRandomRule(folderId: string, ruleName: string): Promise<Rule> {
|
||||
const response = await this.createRule(folderId, {
|
||||
name: ruleName,
|
||||
isEnabled: true,
|
||||
actions: [ActionTypes.ADDFEATURES.value, ActionTypes.CHECKIN.value]
|
||||
});
|
||||
return response;
|
||||
}
|
||||
|
||||
async login(userProfile: keyof typeof users) {
|
||||
const userToLog =
|
||||
users[
|
||||
Object.keys(users)
|
||||
.filter((user) => user.match(new RegExp(`^${userProfile.toString()}$`)))
|
||||
.toString()
|
||||
] || userProfile;
|
||||
let e: any;
|
||||
|
||||
try {
|
||||
e = await this.alfrescoApi.login(userToLog.username, userToLog.password);
|
||||
} catch (error) {
|
||||
logger.error(`[API Client Factory] Log in user ${userToLog.username} failed ${e}`);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
26
projects/aca-playwright-shared/src/api/index.ts
Normal file
26
projects/aca-playwright-shared/src/api/index.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
/*!
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
export * from './rules-api';
|
||||
export * from './api-client-factory';
|
72
projects/aca-playwright-shared/src/api/rules-api.ts
Normal file
72
projects/aca-playwright-shared/src/api/rules-api.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
/*!
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
type RuleTrigger = 'inbound' | 'update' | 'outbound';
|
||||
|
||||
export interface RuleCompositeCondition {
|
||||
inverted: boolean;
|
||||
booleanMode: 'and' | 'or';
|
||||
compositeConditions: RuleCompositeCondition[];
|
||||
simpleConditions: RuleSimpleCondition[];
|
||||
}
|
||||
|
||||
export interface RuleSimpleCondition {
|
||||
field: string;
|
||||
comparator: string;
|
||||
parameter: string;
|
||||
}
|
||||
|
||||
export interface Rule {
|
||||
id: string;
|
||||
name: string;
|
||||
description: string;
|
||||
isEnabled: boolean;
|
||||
isInheritable: boolean;
|
||||
isAsynchronous: boolean;
|
||||
errorScript: string;
|
||||
isShared: boolean;
|
||||
triggers: RuleTrigger[];
|
||||
conditions: RuleCompositeCondition;
|
||||
actions: RuleAction[];
|
||||
}
|
||||
|
||||
export interface RuleAction {
|
||||
actionDefinitionId: string;
|
||||
params?: { [key: string]: unknown };
|
||||
}
|
||||
|
||||
export class ActionTypes {
|
||||
static ADDFEATURES = new ActionTypes('ADDFEATURES', {
|
||||
actionDefinitionId: 'add-features',
|
||||
params: { 'aspect-name': 'cm:thumbnailed' }
|
||||
});
|
||||
static CHECKIN = new ActionTypes('CHECKIN', {
|
||||
actionDefinitionId: 'check-in',
|
||||
params: {
|
||||
description: 'test',
|
||||
minorChange: true
|
||||
}
|
||||
});
|
||||
constructor(public key: string, public value: RuleAction) {}
|
||||
}
|
Reference in New Issue
Block a user