From f2f9049c2cbe488e2d29a60bce6c3e292b8af55b Mon Sep 17 00:00:00 2001 From: Silviu Popa Date: Thu, 1 Oct 2020 15:15:24 +0300 Subject: [PATCH] [ACA-3627] - Add completedBy filter again (#6186) * [ACA-3627] - Add completedBy filter again * add more unit tests Co-authored-by: Silviu Popa --- ...base-edit-task-filter-cloud.component.html | 10 +++ .../base-edit-task-filter-cloud.component.ts | 10 ++- .../edit-task-filter-cloud.component.spec.ts | 73 ++++++++++++++++++- .../edit-task-filter-cloud.component.ts | 7 ++ .../mock/task-filters-cloud.mock.ts | 6 +- .../task-filters/models/filter-cloud.model.ts | 3 +- 6 files changed, 104 insertions(+), 5 deletions(-) diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.html b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.html index 2db89464a6..3a4ca575db 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.html +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.html @@ -101,6 +101,16 @@ (dateTypeChange)="onDateTypeChange($event, taskFilterProperty)" (dateChanged)="onDateRangeFilterChanged($event, taskFilterProperty)"> + +
+ +
diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.ts index 55abebdc0e..cb1c29e358 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.ts @@ -27,7 +27,7 @@ import { AbstractControl, FormBuilder, FormGroup } from '@angular/forms'; import { debounceTime, filter, takeUntil } from 'rxjs/operators'; import { Subject } from 'rxjs'; import { DateAdapter } from '@angular/material/core'; -import { UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core'; +import { IdentityUserModel, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core'; @Directive() // tslint:disable-next-line: directive-class-suffix @@ -182,6 +182,10 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnChan return property.type === 'date-range'; } + isUserSelectType(property: TaskFilterProperties): boolean { + return property.type === 'people'; + } + isSelectType(property: TaskFilterProperties): boolean { return property.type === 'select'; } @@ -292,6 +296,10 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnChan ); } + onChangedUser(users: IdentityUserModel[], userProperty: TaskFilterProperties) { + this.getPropertyController(userProperty).setValue(users[0]); + } + hasError(property: TaskFilterProperties): boolean { return this.getPropertyController(property).errors && this.getPropertyController(property).errors.invalid; } diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.spec.ts index 333d537458..b32ba49433 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.spec.ts @@ -19,7 +19,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { SimpleChange } from '@angular/core'; import { By } from '@angular/platform-browser'; -import { setupTestBed } from '@alfresco/adf-core'; +import { AlfrescoApiService, IdentityUserModel, setupTestBed } from '@alfresco/adf-core'; import { MatDialog } from '@angular/material/dialog'; import { of } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; @@ -38,6 +38,7 @@ import moment from 'moment-es6'; import { TranslateModule } from '@ngx-translate/core'; import { DateCloudFilterType } from '../../../../models/date-cloud-filter.model'; import { TaskFilterCloudModel } from '../../models/filter-cloud.model'; +import { PeopleCloudModule } from '../../../../people/people-cloud.module'; describe('EditTaskFilterCloudComponent', () => { let component: EditTaskFilterCloudComponent; @@ -45,15 +46,23 @@ describe('EditTaskFilterCloudComponent', () => { let appsService: AppsProcessCloudService; let fixture: ComponentFixture; let dialog: MatDialog; + let alfrescoApiService: AlfrescoApiService; let getTaskFilterSpy: jasmine.Spy; let getRunningApplicationsSpy: jasmine.Spy; let taskService: TaskCloudService; + const mock = { + oauth2Auth: { + callCustomApi: () => Promise.resolve(fakeApplicationInstance) + } + }; + setupTestBed({ imports: [ TranslateModule.forRoot(), ProcessServiceCloudTestingModule, - TaskFiltersCloudModule + TaskFiltersCloudModule, + PeopleCloudModule ], providers: [ MatDialog, @@ -67,6 +76,7 @@ describe('EditTaskFilterCloudComponent', () => { service = TestBed.inject(TaskFilterCloudService); appsService = TestBed.inject(AppsProcessCloudService); taskService = TestBed.inject(TaskCloudService); + alfrescoApiService = TestBed.inject(AlfrescoApiService); dialog = TestBed.inject(MatDialog); spyOn(dialog, 'open').and.returnValue({ afterClosed: of({ @@ -75,6 +85,7 @@ describe('EditTaskFilterCloudComponent', () => { name: 'fake-name' }) }); + spyOn(alfrescoApiService, 'getInstance').and.returnValue(mock); getTaskFilterSpy = spyOn(service, 'getTaskFilterById').and.returnValue(of(fakeFilter)); getRunningApplicationsSpy = spyOn(appsService, 'getDeployedApplicationsByStatus').and.returnValue(of(fakeApplicationInstance)); fixture.detectChanges(); @@ -471,6 +482,64 @@ describe('EditTaskFilterCloudComponent', () => { }); })); + it('should fetch data in completedBy filter', async(() => { + component.filterProperties = ['appName', 'processInstanceId', 'priority', 'completedBy']; + fixture.detectChanges(); + const taskFilterIdChange = new SimpleChange(undefined, 'mock-task-filter-id', true); + component.ngOnChanges({ 'id': taskFilterIdChange }); + const appController = component.editTaskFilterForm.get('completedBy'); + fixture.detectChanges(); + fixture.whenStable().then(() => { + expect(appController).toBeDefined(); + expect(JSON.stringify(appController.value)).toBe(JSON.stringify({ + id: 'mock-id', + username: 'testCompletedByUser' + })); + }); + })); + + it('should show completedBy filter', async(() => { + component.filterProperties = ['appName', 'processInstanceId', 'priority', 'completedBy']; + fixture.detectChanges(); + const taskFilterIdChange = new SimpleChange(undefined, 'mock-task-filter-id', true); + component.ngOnChanges({ 'id': taskFilterIdChange }); + fixture.detectChanges(); + fixture.whenStable().then(() => { + const peopleCloudComponent = fixture.debugElement.nativeElement.querySelector('adf-cloud-people'); + expect(peopleCloudComponent).toBeTruthy(); + }); + })); + + it('should update form on completed by user is updated', (done) => { + component.appName = 'fake'; + component.filterProperties = ['appName', 'processInstanceId', 'priority', 'completedBy']; + const taskFilterIdChange = new SimpleChange(undefined, 'mock-task-filter-id', true); + component.ngOnChanges({ 'id': taskFilterIdChange }); + fixture.detectChanges(); + + const mockUser: IdentityUserModel[] = [{ + id: 'id', + username: 'test' + }]; + + const startedDateTypeControl: AbstractControl = component.editTaskFilterForm.get('completedBy'); + startedDateTypeControl.setValue('hruser'); + + component.onChangedUser(mockUser, { + key: 'completedBy', + label: '', + type: 'people', + value: null + }); + + fixture.detectChanges(); + component.filterChange.subscribe(() => { + expect(component.changedTaskFilter.completedBy).toEqual(mockUser[0]); + done(); + }); + component.onFilterChange(); + }); + it('should set the correct started date range when date range option is changed', (done) => { component.appName = 'fake'; component.filterProperties = ['appName', 'processInstanceId', 'priority', 'dueDateRange']; diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.ts index 74db85a97e..765c781dc1 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.ts @@ -339,6 +339,13 @@ export class EditTaskFilterCloudComponent extends BaseEditTaskFilterCloudCompone _completedFrom: this.taskFilter.completedFrom || null, _completedTo: this.taskFilter.completedTo || null } + }), + new TaskFilterProperties({ + label: 'ADF_CLOUD_EDIT_TASK_FILTER.LABEL.COMPLETED_BY', + type: 'people', + key: 'completedBy', + value: this.taskFilter.completedBy ? [this.taskFilter.completedBy] : null, + selectionMode: 'single' }) ]; } diff --git a/lib/process-services-cloud/src/lib/task/task-filters/mock/task-filters-cloud.mock.ts b/lib/process-services-cloud/src/lib/task/task-filters/mock/task-filters-cloud.mock.ts index 84b074d78d..c5523049df 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/mock/task-filters-cloud.mock.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/mock/task-filters-cloud.mock.ts @@ -77,7 +77,11 @@ export const fakeFilter = new TaskFilterCloudModel({ processDefinitionId: 'process-def-id', assignee: 'fake-involved', order: 'ASC', - sort: 'id' + sort: 'id', + completedBy: { + id: 'mock-id', + username: 'testCompletedByUser' + } }); export const fakeServiceFilter = { diff --git a/lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts b/lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts index 57f514341d..9cdd74d6c5 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts @@ -18,6 +18,7 @@ import { DateCloudFilterType } from '../../../models/date-cloud-filter.model'; import { DateRangeFilterService } from '../../../common/date-range-filter/date-range-filter.service'; import { ComponentSelectionMode } from '../../../types'; +import { IdentityUserModel } from '@alfresco/adf-core'; export class TaskFilterCloudModel { id: string; @@ -42,11 +43,11 @@ export class TaskFilterCloudModel { parentTaskId: string; priority: number; standalone: boolean; - completedBy: string; lastModifiedFrom: string; lastModifiedTo: string; completedDateType: DateCloudFilterType; completedDate: Date; + completedBy: IdentityUserModel; private _completedFrom: string; private _completedTo: string;