mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-26 17:24:56 +00:00
[ACA-3627] - Add completedBy filter again (#6186)
* [ACA-3627] - Add completedBy filter again * add more unit tests Co-authored-by: Silviu Popa <p3701014@L3700101120.ness.com>
This commit is contained in:
parent
571315fe38
commit
f2f9049c2c
@ -101,6 +101,16 @@
|
|||||||
(dateTypeChange)="onDateTypeChange($event, taskFilterProperty)"
|
(dateTypeChange)="onDateTypeChange($event, taskFilterProperty)"
|
||||||
(dateChanged)="onDateRangeFilterChanged($event, taskFilterProperty)">
|
(dateChanged)="onDateRangeFilterChanged($event, taskFilterProperty)">
|
||||||
</adf-cloud-date-range-filter>
|
</adf-cloud-date-range-filter>
|
||||||
|
|
||||||
|
<div fxFlex="23%" class="adf-edit-task-filter-checkbox" *ngIf="isUserSelectType(taskFilterProperty)">
|
||||||
|
<adf-cloud-people
|
||||||
|
[preSelectUsers]="taskFilterProperty.value"
|
||||||
|
[title]="taskFilterProperty.label"
|
||||||
|
[validate]="true"
|
||||||
|
[appName]="appName"
|
||||||
|
[mode]="taskFilterProperty.selectionMode"
|
||||||
|
(changedUsers)="onChangedUser($event, taskFilterProperty)"></adf-cloud-people>
|
||||||
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -27,7 +27,7 @@ import { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';
|
|||||||
import { debounceTime, filter, takeUntil } from 'rxjs/operators';
|
import { debounceTime, filter, takeUntil } from 'rxjs/operators';
|
||||||
import { Subject } from 'rxjs';
|
import { Subject } from 'rxjs';
|
||||||
import { DateAdapter } from '@angular/material/core';
|
import { DateAdapter } from '@angular/material/core';
|
||||||
import { UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
|
import { IdentityUserModel, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
|
||||||
|
|
||||||
@Directive()
|
@Directive()
|
||||||
// tslint:disable-next-line: directive-class-suffix
|
// tslint:disable-next-line: directive-class-suffix
|
||||||
@ -182,6 +182,10 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnChan
|
|||||||
return property.type === 'date-range';
|
return property.type === 'date-range';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isUserSelectType(property: TaskFilterProperties): boolean {
|
||||||
|
return property.type === 'people';
|
||||||
|
}
|
||||||
|
|
||||||
isSelectType(property: TaskFilterProperties): boolean {
|
isSelectType(property: TaskFilterProperties): boolean {
|
||||||
return property.type === 'select';
|
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 {
|
hasError(property: TaskFilterProperties): boolean {
|
||||||
return this.getPropertyController(property).errors && this.getPropertyController(property).errors.invalid;
|
return this.getPropertyController(property).errors && this.getPropertyController(property).errors.invalid;
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
|||||||
import { SimpleChange } from '@angular/core';
|
import { SimpleChange } from '@angular/core';
|
||||||
import { By } from '@angular/platform-browser';
|
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 { MatDialog } from '@angular/material/dialog';
|
||||||
import { of } from 'rxjs';
|
import { of } from 'rxjs';
|
||||||
import { debounceTime } from 'rxjs/operators';
|
import { debounceTime } from 'rxjs/operators';
|
||||||
@ -38,6 +38,7 @@ import moment from 'moment-es6';
|
|||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { DateCloudFilterType } from '../../../../models/date-cloud-filter.model';
|
import { DateCloudFilterType } from '../../../../models/date-cloud-filter.model';
|
||||||
import { TaskFilterCloudModel } from '../../models/filter-cloud.model';
|
import { TaskFilterCloudModel } from '../../models/filter-cloud.model';
|
||||||
|
import { PeopleCloudModule } from '../../../../people/people-cloud.module';
|
||||||
|
|
||||||
describe('EditTaskFilterCloudComponent', () => {
|
describe('EditTaskFilterCloudComponent', () => {
|
||||||
let component: EditTaskFilterCloudComponent;
|
let component: EditTaskFilterCloudComponent;
|
||||||
@ -45,15 +46,23 @@ describe('EditTaskFilterCloudComponent', () => {
|
|||||||
let appsService: AppsProcessCloudService;
|
let appsService: AppsProcessCloudService;
|
||||||
let fixture: ComponentFixture<EditTaskFilterCloudComponent>;
|
let fixture: ComponentFixture<EditTaskFilterCloudComponent>;
|
||||||
let dialog: MatDialog;
|
let dialog: MatDialog;
|
||||||
|
let alfrescoApiService: AlfrescoApiService;
|
||||||
let getTaskFilterSpy: jasmine.Spy;
|
let getTaskFilterSpy: jasmine.Spy;
|
||||||
let getRunningApplicationsSpy: jasmine.Spy;
|
let getRunningApplicationsSpy: jasmine.Spy;
|
||||||
let taskService: TaskCloudService;
|
let taskService: TaskCloudService;
|
||||||
|
|
||||||
|
const mock = {
|
||||||
|
oauth2Auth: {
|
||||||
|
callCustomApi: () => Promise.resolve(fakeApplicationInstance)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
setupTestBed({
|
setupTestBed({
|
||||||
imports: [
|
imports: [
|
||||||
TranslateModule.forRoot(),
|
TranslateModule.forRoot(),
|
||||||
ProcessServiceCloudTestingModule,
|
ProcessServiceCloudTestingModule,
|
||||||
TaskFiltersCloudModule
|
TaskFiltersCloudModule,
|
||||||
|
PeopleCloudModule
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
MatDialog,
|
MatDialog,
|
||||||
@ -67,6 +76,7 @@ describe('EditTaskFilterCloudComponent', () => {
|
|||||||
service = TestBed.inject(TaskFilterCloudService);
|
service = TestBed.inject(TaskFilterCloudService);
|
||||||
appsService = TestBed.inject(AppsProcessCloudService);
|
appsService = TestBed.inject(AppsProcessCloudService);
|
||||||
taskService = TestBed.inject(TaskCloudService);
|
taskService = TestBed.inject(TaskCloudService);
|
||||||
|
alfrescoApiService = TestBed.inject(AlfrescoApiService);
|
||||||
dialog = TestBed.inject(MatDialog);
|
dialog = TestBed.inject(MatDialog);
|
||||||
spyOn(dialog, 'open').and.returnValue({
|
spyOn(dialog, 'open').and.returnValue({
|
||||||
afterClosed: of({
|
afterClosed: of({
|
||||||
@ -75,6 +85,7 @@ describe('EditTaskFilterCloudComponent', () => {
|
|||||||
name: 'fake-name'
|
name: 'fake-name'
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
spyOn(alfrescoApiService, 'getInstance').and.returnValue(mock);
|
||||||
getTaskFilterSpy = spyOn(service, 'getTaskFilterById').and.returnValue(of(fakeFilter));
|
getTaskFilterSpy = spyOn(service, 'getTaskFilterById').and.returnValue(of(fakeFilter));
|
||||||
getRunningApplicationsSpy = spyOn(appsService, 'getDeployedApplicationsByStatus').and.returnValue(of(fakeApplicationInstance));
|
getRunningApplicationsSpy = spyOn(appsService, 'getDeployedApplicationsByStatus').and.returnValue(of(fakeApplicationInstance));
|
||||||
fixture.detectChanges();
|
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) => {
|
it('should set the correct started date range when date range option is changed', (done) => {
|
||||||
component.appName = 'fake';
|
component.appName = 'fake';
|
||||||
component.filterProperties = ['appName', 'processInstanceId', 'priority', 'dueDateRange'];
|
component.filterProperties = ['appName', 'processInstanceId', 'priority', 'dueDateRange'];
|
||||||
|
@ -339,6 +339,13 @@ export class EditTaskFilterCloudComponent extends BaseEditTaskFilterCloudCompone
|
|||||||
_completedFrom: this.taskFilter.completedFrom || null,
|
_completedFrom: this.taskFilter.completedFrom || null,
|
||||||
_completedTo: this.taskFilter.completedTo || 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'
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,11 @@ export const fakeFilter = new TaskFilterCloudModel({
|
|||||||
processDefinitionId: 'process-def-id',
|
processDefinitionId: 'process-def-id',
|
||||||
assignee: 'fake-involved',
|
assignee: 'fake-involved',
|
||||||
order: 'ASC',
|
order: 'ASC',
|
||||||
sort: 'id'
|
sort: 'id',
|
||||||
|
completedBy: {
|
||||||
|
id: 'mock-id',
|
||||||
|
username: 'testCompletedByUser'
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export const fakeServiceFilter = {
|
export const fakeServiceFilter = {
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
import { DateCloudFilterType } from '../../../models/date-cloud-filter.model';
|
import { DateCloudFilterType } from '../../../models/date-cloud-filter.model';
|
||||||
import { DateRangeFilterService } from '../../../common/date-range-filter/date-range-filter.service';
|
import { DateRangeFilterService } from '../../../common/date-range-filter/date-range-filter.service';
|
||||||
import { ComponentSelectionMode } from '../../../types';
|
import { ComponentSelectionMode } from '../../../types';
|
||||||
|
import { IdentityUserModel } from '@alfresco/adf-core';
|
||||||
|
|
||||||
export class TaskFilterCloudModel {
|
export class TaskFilterCloudModel {
|
||||||
id: string;
|
id: string;
|
||||||
@ -42,11 +43,11 @@ export class TaskFilterCloudModel {
|
|||||||
parentTaskId: string;
|
parentTaskId: string;
|
||||||
priority: number;
|
priority: number;
|
||||||
standalone: boolean;
|
standalone: boolean;
|
||||||
completedBy: string;
|
|
||||||
lastModifiedFrom: string;
|
lastModifiedFrom: string;
|
||||||
lastModifiedTo: string;
|
lastModifiedTo: string;
|
||||||
completedDateType: DateCloudFilterType;
|
completedDateType: DateCloudFilterType;
|
||||||
completedDate: Date;
|
completedDate: Date;
|
||||||
|
completedBy: IdentityUserModel;
|
||||||
|
|
||||||
private _completedFrom: string;
|
private _completedFrom: string;
|
||||||
private _completedTo: string;
|
private _completedTo: string;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user