AAE-41605 Add ability to filter by linked processes (#11664)

This commit is contained in:
Robert Duda
2026-02-18 11:50:14 +01:00
committed by GitHub
parent b6a6c1bc86
commit 93fc7c166c
6 changed files with 81 additions and 0 deletions

View File

@@ -49,6 +49,7 @@ export class ProcessFilterCloudModel {
suspendedDateType: DateCloudFilterType | null;
includeSubprocesses: boolean | null;
includeUnlinkedProcesses: boolean | null;
includeLinkedProcesses: boolean | null;
completedDate: Date | null;
environmentId: string | null;
showCounter: boolean;
@@ -116,6 +117,7 @@ export class ProcessFilterCloudModel {
this._suspendedTo = obj._suspendedTo || null;
this.includeSubprocesses = obj.includeSubprocesses || null;
this.includeUnlinkedProcesses = obj.includeUnlinkedProcesses || null;
this.includeLinkedProcesses = obj.includeLinkedProcesses || null;
this.initArrayProperties(obj);
}

View File

@@ -735,6 +735,35 @@ describe('ProcessListCloudComponent', () => {
});
});
describe('includeLinkedProcesses', () => {
it('should set includeLinkedProcesses to true in request node when input is true', () => {
spyOn(processListCloudService, 'fetchProcessList').and.returnValue(of(fakeProcessCloudList));
component.includeLinkedProcesses = true;
component.ngAfterContentInit();
component.reload();
expect(component.processListRequestNode.includeLinkedProcesses).toBeTrue();
});
it('should set includeLinkedProcesses to false in request node when input is false', () => {
spyOn(processListCloudService, 'fetchProcessList').and.returnValue(of(fakeProcessCloudList));
component.includeLinkedProcesses = false;
component.ngAfterContentInit();
component.reload();
expect(component.processListRequestNode.includeLinkedProcesses).toBeFalse();
});
it('should omit includeLinkedProcesses in request node when input is null', () => {
spyOn(processListCloudService, 'fetchProcessList').and.returnValue(of(fakeProcessCloudList));
component.includeLinkedProcesses = null;
component.ngAfterContentInit();
component.reload();
expect(component.processListRequestNode.includeLinkedProcesses).toBeNull();
});
});
describe('processRelatedTo', () => {
it('should include processRelatedTo in request node when values are provided', () => {
spyOn(processListCloudService, 'fetchProcessList').and.returnValue(of(fakeProcessCloudList));

View File

@@ -310,6 +310,10 @@ export class ProcessListCloudComponent
@Input()
includeUnlinkedProcesses: boolean | null = null;
/** Include linked processes in the process list. */
@Input()
includeLinkedProcesses: boolean | null = null;
/** Emitted when a row in the process list is clicked. */
@Output()
rowClick: EventEmitter<string> = new EventEmitter<string>();
@@ -655,6 +659,7 @@ export class ProcessListCloudComponent
suspendedTo: this.suspendedTo,
includeSubprocesses: this.includeSubprocesses,
includeUnlinkedProcesses: this.includeUnlinkedProcesses,
includeLinkedProcesses: this.includeLinkedProcesses,
processVariableKeys: this.getVariableDefinitionsRequestModel(),
processVariableFilters: this.processVariables,
processRelatedTo: this.processRelatedTo()

View File

@@ -104,6 +104,7 @@ export class ProcessListRequestModel {
suspendedTo?: string;
includeSubprocesses?: boolean;
includeUnlinkedProcesses?: boolean;
includeLinkedProcesses?: boolean;
processRelatedTo?: string[];
processVariableFilters?: ProcessVariableFilterModel[];
@@ -135,6 +136,7 @@ export class ProcessListRequestModel {
this.suspendedTo = obj.suspendedTo;
this.includeSubprocesses = obj.includeSubprocesses;
this.includeUnlinkedProcesses = obj.includeUnlinkedProcesses;
this.includeLinkedProcesses = obj.includeLinkedProcesses;
this.processVariableKeys = obj.processVariableKeys;
this.processVariableFilters = obj.processVariableFilters;

View File

@@ -258,6 +258,48 @@ describe('ProcessListCloudService', () => {
expect(requestBodyParams.includeUnlinkedProcesses).toBeUndefined();
});
});
describe('includeLinkedProcesses', () => {
it('should include includeLinkedProcesses=true in body', async () => {
const processRequest = {
appName: 'fakeName',
pagination: { skipCount: 0, maxItems: 20 },
includeLinkedProcesses: true
} as ProcessListRequestModel;
requestSpy.and.callFake(returnCallBody);
const requestBodyParams = await firstValueFrom(service.fetchProcessList(processRequest));
expect(requestBodyParams).toEqual({ includeLinkedProcesses: true });
});
it('should include includeLinkedProcesses=false in body', async () => {
const processRequest = {
appName: 'fakeName',
pagination: { skipCount: 0, maxItems: 20 },
includeLinkedProcesses: false
} as ProcessListRequestModel;
requestSpy.and.callFake(returnCallBody);
const requestBodyParams = await firstValueFrom(service.fetchProcessList(processRequest));
expect(requestBodyParams).toEqual({ includeLinkedProcesses: false });
});
it('should omit includeLinkedProcesses when null', async () => {
const processRequest = {
appName: 'fakeName',
pagination: { skipCount: 0, maxItems: 20 },
includeLinkedProcesses: null
} as unknown as ProcessListRequestModel;
requestSpy.and.callFake(returnCallBody);
const requestBodyParams = await firstValueFrom(service.fetchProcessList(processRequest));
expect(requestBodyParams).toEqual({});
expect(requestBodyParams.includeLinkedProcesses).toBeUndefined();
});
});
});
describe('getAdminProcessRequest', () => {

View File

@@ -121,6 +121,7 @@ export class ProcessListCloudService extends BaseCloudService {
processVariableFilters: requestNode.processVariableFilters,
includeSubprocesses: requestNode.includeSubprocesses,
includeUnlinkedProcesses: requestNode.includeUnlinkedProcesses,
includeLinkedProcesses: requestNode.includeLinkedProcesses,
processRelatedTo: requestNode.processRelatedTo
};