mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-07-24 17:31:52 +00:00
[ACS-4586] Implemented Playwright Framework and add it to CI/CD (#2985)
This commit is contained in:
committed by
GitHub
parent
197ef8f0e3
commit
d68deab2bd
122
e2e/playwright/shared/api/api-client-factory.ts
Normal file
122
e2e/playwright/shared/api/api-client-factory.ts
Normal file
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
* Copyright © 2005 - 2023 Alfresco Software, Ltd. All rights reserved.
|
||||
*
|
||||
* License rights for this program may be obtained from Alfresco Software, Ltd.
|
||||
* pursuant to a written agreement and any use of this program without such an
|
||||
* agreement is prohibited.
|
||||
*/
|
||||
|
||||
import {
|
||||
AdminTenantsApi,
|
||||
AdminUsersApi,
|
||||
AlfrescoApi,
|
||||
ContentClient,
|
||||
GroupsApi,
|
||||
NodesApi,
|
||||
PeopleApi,
|
||||
QueriesApi,
|
||||
SearchApi,
|
||||
SecurityGroupsApi,
|
||||
SecurityMarksApi,
|
||||
SitesApi,
|
||||
UploadApi
|
||||
} from '@alfresco/js-api';
|
||||
import { users } from '../page-objects';
|
||||
import { logger } from '@alfresco/adf-cli/scripts/logger';
|
||||
import { ActionTypes, Rule } from './rules-api';
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
10
e2e/playwright/shared/api/index.ts
Normal file
10
e2e/playwright/shared/api/index.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
* Copyright © 2005 - 2023 Alfresco Software, Ltd. All rights reserved.
|
||||
*
|
||||
* License rights for this program may be obtained from Alfresco Software, Ltd.
|
||||
* pursuant to a written agreement and any use of this program without such an
|
||||
* agreement is prohibited.
|
||||
*/
|
||||
|
||||
export * from './rules-api';
|
||||
export * from './api-client-factory';
|
56
e2e/playwright/shared/api/rules-api.ts
Normal file
56
e2e/playwright/shared/api/rules-api.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright © 2005 - 2023 Alfresco Software, Ltd. All rights reserved.
|
||||
*
|
||||
* License rights for this program may be obtained from Alfresco Software, Ltd.
|
||||
* pursuant to a written agreement and any use of this program without such an
|
||||
* agreement is prohibited.
|
||||
*/
|
||||
|
||||
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