AAE-37368 Applying new tasks and process count APIs (#11119)

* AAE-37368 Applying new tasks and process count APIs

* AAE-37368 Added tasks API and unit tests
This commit is contained in:
Ehsan Rezaei
2025-09-04 16:56:09 +02:00
committed by GitHub
parent ea81fcd6ad
commit e7bba32679
8 changed files with 99 additions and 6 deletions

View File

@@ -51,7 +51,7 @@ describe('ProcessFiltersCloudComponent', () => {
provide: ProcessListCloudService,
useValue: {
getProcessCounter: () => of(10),
getProcessListCounter: () => of(10)
getProcessListCount: () => of(10)
}
},
{ provide: ProcessFilterCloudService, useValue: ProcessFilterCloudServiceMock }

View File

@@ -319,7 +319,7 @@ export class ProcessFiltersCloudComponent implements OnInit, OnChanges {
private fetchProcessFilterCounter(filter: ProcessFilterCloudModel): Observable<number> {
return this.searchApiMethod === 'POST'
? this.processListCloudService.getProcessListCounter(new ProcessFilterCloudAdapter(filter))
? this.processListCloudService.getProcessListCount(new ProcessFilterCloudAdapter(filter))
: this.processListCloudService.getProcessCounter(filter.appName, filter.status);
}
}

View File

@@ -277,4 +277,40 @@ describe('ProcessListCloudService', () => {
expect(requestBodyParams.variableKeys[1]).toBe('test-two');
});
});
describe('getProcessListCount', () => {
it('should concat the app name to the request url', async () => {
const taskRequest = {
appName: 'fakeName'
} as ProcessListRequestModel;
requestSpy.and.callFake(returnCallUrl);
const res = await firstValueFrom(service.getProcessListCount(taskRequest));
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res).toContain('fakeName/query/v1/process-instances/count');
});
it('should return 0 if response is falsy for getProcessListCount', async () => {
const taskRequest = {
appName: 'fakeName',
pagination: { skipCount: 0, maxItems: 20 }
} as ProcessListRequestModel;
requestSpy.and.callFake(() => Promise.resolve(null));
const res = await firstValueFrom(service.getProcessListCount(taskRequest));
expect(res).toBe(0);
});
it('should throw error if appName is not configured in getProcessListCount', async () => {
const taskRequest = { appName: null } as ProcessListRequestModel;
requestSpy.and.callFake(returnCallUrl);
const res = await firstValueFrom(service.getProcessListCount(taskRequest).pipe(catchError((error) => of(error.message))));
expect(res).toBe('Appname not configured');
});
});
});

View File

@@ -230,6 +230,17 @@ export class ProcessListCloudService extends BaseCloudService {
return this.getProcess(callback, defaultQueryUrl, requestNode, queryUrl);
}
getProcessListCount(requestNode: ProcessListRequestModel): Observable<number> {
if (!requestNode?.appName) {
return throwError(() => new Error('Appname not configured'));
}
const queryUrl = `${this.getBasePath(requestNode.appName)}/query/v1/process-instances/count`;
const queryData = this.buildQueryData(requestNode);
return this.post<object, number>(queryUrl, queryData).pipe(map((response) => response || 0));
}
private getVariableKeysFromQueryParams(queryParams: any): string[] {
if (!queryParams['variableKeys'] || queryParams['variableKeys'].length <= 0) {
return [];

View File

@@ -43,7 +43,7 @@ describe('TaskFiltersCloudComponent', () => {
let fixture: ComponentFixture<TaskFiltersCloudComponent>;
let getTaskFilterCounterSpy: jasmine.Spy;
let getTaskListFiltersSpy: jasmine.Spy;
let getTaskListCounterSpy: jasmine.Spy;
let getTaskListCountSpy: jasmine.Spy;
const configureTestingModule = (searchApiMethod: 'GET' | 'POST') => {
TestBed.configureTestingModule({
@@ -53,7 +53,7 @@ describe('TaskFiltersCloudComponent', () => {
taskFilterService = TestBed.inject(TaskFilterCloudService);
taskListService = TestBed.inject(TaskListCloudService);
getTaskFilterCounterSpy = spyOn(taskFilterService, 'getTaskFilterCounter').and.returnValue(of(11));
getTaskListCounterSpy = spyOn(taskListService, 'getTaskListCounter').and.returnValue(of(11));
getTaskListCountSpy = spyOn(taskListService, 'getTaskListCount').and.returnValue(of(11));
spyOn(taskFilterService, 'getTaskNotificationSubscription').and.returnValue(of(taskNotifications));
getTaskListFiltersSpy = spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(of(fakeGlobalFilter));
@@ -357,7 +357,7 @@ describe('TaskFiltersCloudComponent', () => {
);
await filterButton.click();
expect(getTaskListCounterSpy).toHaveBeenCalledWith(new TaskFilterCloudAdapter(fakeGlobalFilter[0]));
expect(getTaskListCountSpy).toHaveBeenCalledWith(new TaskFilterCloudAdapter(fakeGlobalFilter[0]));
});
});

View File

@@ -150,7 +150,7 @@ export class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent imp
private fetchTaskFilterCounter(filter: TaskFilterCloudModel): Observable<number> {
return this.searchApiMethod === 'POST'
? this.taskListCloudService.getTaskListCounter(new TaskFilterCloudAdapter(filter))
? this.taskListCloudService.getTaskListCount(new TaskFilterCloudAdapter(filter))
: this.taskFilterCloudService.getTaskFilterCounter(filter);
}

View File

@@ -155,6 +155,41 @@ describe('TaskListCloudService', () => {
const res = await firstValueFrom(service.fetchTaskList(taskRequest).pipe(catchError((error) => of(error.message))));
expect(res).toBe('Appname not configured');
});
});
describe('getTaskListCount', () => {
it('should concat the app name to the request url', async () => {
const taskRequest = {
appName: 'fakeName'
} as TaskListRequestModel;
requestSpy.and.callFake(returnCallUrl);
const res = await firstValueFrom(service.getTaskListCount(taskRequest));
expect(res).toBeDefined();
expect(res).not.toBeNull();
expect(res).toContain('fakeName/query/v1/tasks/count');
});
it('should return 0 if response is falsy for getTaskListCount', async () => {
const taskRequest = {
appName: 'fakeName',
pagination: { skipCount: 0, maxItems: 20 }
} as TaskListRequestModel;
requestSpy.and.callFake(() => Promise.resolve(null));
const res = await firstValueFrom(service.getTaskListCount(taskRequest));
expect(res).toBe(0);
});
it('should throw error if appName is not configured in getTaskListCount', async () => {
const taskRequest = { appName: null } as TaskListRequestModel;
requestSpy.and.callFake(returnCallUrl);
const res = await firstValueFrom(service.getTaskListCount(taskRequest).pipe(catchError((error) => of(error.message))));
expect(res).toBe('Appname not configured');
});
});

View File

@@ -97,6 +97,17 @@ export class TaskListCloudService extends BaseCloudService implements TaskListCl
return this.fetchTaskList(requestNode).pipe(map((tasks) => tasks.list.pagination.totalItems));
}
getTaskListCount(requestNode: TaskListRequestModel): Observable<number> {
if (!requestNode?.appName) {
return throwError(() => new Error('Appname not configured'));
}
const queryUrl = `${this.getBasePath(requestNode.appName)}/query/v1/tasks/count`;
const queryData = this.buildQueryData(requestNode);
return this.post<object, number>(queryUrl, queryData).pipe(map((response) => response || 0));
}
protected buildQueryData(requestNode: TaskListRequestModel) {
const queryData: any = {
id: requestNode.id,