diff --git a/lib/process-services-cloud/src/lib/process/process-filters/components/process-filters/process-filters-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/process/process-filters/components/process-filters/process-filters-cloud.component.spec.ts index 8495132621..7a02f9b073 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/components/process-filters/process-filters-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/components/process-filters/process-filters-cloud.component.spec.ts @@ -51,7 +51,7 @@ describe('ProcessFiltersCloudComponent', () => { provide: ProcessListCloudService, useValue: { getProcessCounter: () => of(10), - getProcessListCounter: () => of(10) + getProcessListCount: () => of(10) } }, { provide: ProcessFilterCloudService, useValue: ProcessFilterCloudServiceMock } diff --git a/lib/process-services-cloud/src/lib/process/process-filters/components/process-filters/process-filters-cloud.component.ts b/lib/process-services-cloud/src/lib/process/process-filters/components/process-filters/process-filters-cloud.component.ts index 34196ce319..47f0a6d794 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/components/process-filters/process-filters-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/components/process-filters/process-filters-cloud.component.ts @@ -319,7 +319,7 @@ export class ProcessFiltersCloudComponent implements OnInit, OnChanges { private fetchProcessFilterCounter(filter: ProcessFilterCloudModel): Observable { return this.searchApiMethod === 'POST' - ? this.processListCloudService.getProcessListCounter(new ProcessFilterCloudAdapter(filter)) + ? this.processListCloudService.getProcessListCount(new ProcessFilterCloudAdapter(filter)) : this.processListCloudService.getProcessCounter(filter.appName, filter.status); } } diff --git a/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.spec.ts b/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.spec.ts index dcc0322f93..e669c12d7a 100644 --- a/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.spec.ts +++ b/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.spec.ts @@ -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'); + }); + }); }); diff --git a/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts b/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts index 528242e282..1c552bcd8a 100644 --- a/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts +++ b/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts @@ -230,6 +230,17 @@ export class ProcessListCloudService extends BaseCloudService { return this.getProcess(callback, defaultQueryUrl, requestNode, queryUrl); } + getProcessListCount(requestNode: ProcessListRequestModel): Observable { + 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(queryUrl, queryData).pipe(map((response) => response || 0)); + } + private getVariableKeysFromQueryParams(queryParams: any): string[] { if (!queryParams['variableKeys'] || queryParams['variableKeys'].length <= 0) { return []; diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters/task-filters-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters/task-filters-cloud.component.spec.ts index 26a1c4d6db..a56615117d 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters/task-filters-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters/task-filters-cloud.component.spec.ts @@ -43,7 +43,7 @@ describe('TaskFiltersCloudComponent', () => { let fixture: ComponentFixture; 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])); }); }); diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters/task-filters-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters/task-filters-cloud.component.ts index 9d64b4af13..0062a258f1 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters/task-filters-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters/task-filters-cloud.component.ts @@ -150,7 +150,7 @@ export class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent imp private fetchTaskFilterCounter(filter: TaskFilterCloudModel): Observable { return this.searchApiMethod === 'POST' - ? this.taskListCloudService.getTaskListCounter(new TaskFilterCloudAdapter(filter)) + ? this.taskListCloudService.getTaskListCount(new TaskFilterCloudAdapter(filter)) : this.taskFilterCloudService.getTaskFilterCounter(filter); } diff --git a/lib/process-services-cloud/src/lib/task/task-list/services/task-list-cloud.service.spec.ts b/lib/process-services-cloud/src/lib/task/task-list/services/task-list-cloud.service.spec.ts index 1eb8a1ade1..a4a1f742d7 100644 --- a/lib/process-services-cloud/src/lib/task/task-list/services/task-list-cloud.service.spec.ts +++ b/lib/process-services-cloud/src/lib/task/task-list/services/task-list-cloud.service.spec.ts @@ -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'); }); }); diff --git a/lib/process-services-cloud/src/lib/task/task-list/services/task-list-cloud.service.ts b/lib/process-services-cloud/src/lib/task/task-list/services/task-list-cloud.service.ts index 12f74e8547..2c8983fc41 100644 --- a/lib/process-services-cloud/src/lib/task/task-list/services/task-list-cloud.service.ts +++ b/lib/process-services-cloud/src/lib/task/task-list/services/task-list-cloud.service.ts @@ -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 { + 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(queryUrl, queryData).pipe(map((response) => response || 0)); + } + protected buildQueryData(requestNode: TaskListRequestModel) { const queryData: any = { id: requestNode.id,