The process filter should not be created twice (#1789)

This commit is contained in:
Maurizio Vitale
2017-03-30 18:12:35 +01:00
committed by Denys Vuika
parent a608bc40a4
commit 406d96d5bf
7 changed files with 183 additions and 110 deletions

View File

@@ -105,14 +105,33 @@ export class ActivitiFilters implements OnInit, OnChanges {
getFiltersByAppId(appId?: string) {
this.activiti.getTaskListFilters(appId).subscribe(
(res: FilterRepresentationModel[]) => {
this.resetFilter();
res.forEach((filter) => {
this.filterObserver.next(filter);
});
this.selectFirstFilter();
this.onSuccess.emit(res);
if (res.length === 0 && this.isFilterListEmpty()) {
this.activiti.createDefaultFilters(appId).subscribe(
(resDefault: FilterRepresentationModel[]) => {
this.resetFilter();
resDefault.forEach((filter) => {
this.filterObserver.next(filter);
});
this.selectFirstFilter();
this.onSuccess.emit(resDefault);
},
(errDefault: any) => {
this.logService.error(errDefault);
this.onError.emit(errDefault);
}
);
} else {
this.resetFilter();
res.forEach((filter) => {
this.filterObserver.next(filter);
});
this.selectFirstFilter();
this.onSuccess.emit(res);
}
},
(err) => {
(err: any) => {
this.logService.error(err);
this.onError.emit(err);
}

View File

@@ -26,14 +26,9 @@ import {
} from '../models/filter.model';
import { Comment } from '../models/comment.model';
declare let AlfrescoApi: any;
declare let jasmine: any;
describe('ActivitiTaskListService', () => {
let fakeEmptyFilters = {
size: 0, total: 0, start: 0,
data: []
};
let fakeFilters = {
size: 2, total: 2, start: 0,
@@ -431,29 +426,50 @@ describe('ActivitiTaskListService', () => {
});
});
it('should call the createDefaultFilter when the list is empty', (done) => {
spyOn(service, 'createDefaultFilter');
service.getTaskListFilters().subscribe(
(res) => {
expect(service.createDefaultFilter).toHaveBeenCalled();
it('should return the default filters', (done) => {
service.createDefaultFilters('1234').subscribe(
(res: FilterRepresentationModel []) => {
expect(res).toBeDefined();
expect(res.length).toEqual(4);
expect(res[0].name).toEqual('Involved Tasks');
expect(res[1].name).toEqual('My Tasks');
expect(res[2].name).toEqual('Queued Tasks');
expect(res[3].name).toEqual('Completed Tasks');
done();
}
);
jasmine.Ajax.requests.mostRecent().respondWith({
jasmine.Ajax.requests.at(0).respondWith({
'status': 200,
contentType: 'application/json',
responseText: JSON.stringify(fakeEmptyFilters)
responseText: JSON.stringify({
id: '111', name: 'Involved Tasks', filter: { assignment: 'fake-involved' }
})
});
});
it('should return the default filters', () => {
spyOn(service, 'addFilter');
let filters = service.createDefaultFilter(null);
expect(service.addFilter).toHaveBeenCalledTimes(4);
expect(filters).toBeDefined();
expect(filters.length).toEqual(4);
jasmine.Ajax.requests.at(1).respondWith({
'status': 200,
contentType: 'application/json',
responseText: JSON.stringify({
id: '222', name: 'My Tasks', filter: { assignment: 'fake-assignee' }
})
});
jasmine.Ajax.requests.at(2).respondWith({
'status': 200,
contentType: 'application/json',
responseText: JSON.stringify({
id: '333', name: 'Queued Tasks', filter: { assignment: 'fake-candidate' }
})
});
jasmine.Ajax.requests.at(3).respondWith({
'status': 200,
contentType: 'application/json',
responseText: JSON.stringify({
id: '444', name: 'Completed Tasks', filter: { assignment: 'fake-involved' }
})
});
});
it('should add a filter ', (done) => {

View File

@@ -61,9 +61,6 @@ export class ActivitiTaskListService {
let filterModel = new FilterRepresentationModel(filter);
filters.push(filterModel);
});
if (response && response.data && response.data.length === 0) {
return this.createDefaultFilter(appId);
}
return filters;
}).catch(err => this.handleError(err));
}
@@ -204,26 +201,46 @@ export class ActivitiTaskListService {
* @param appId
* @returns {FilterRepresentationModel[]}
*/
createDefaultFilter(appId: string): FilterRepresentationModel[] {
let filters: FilterRepresentationModel[] = [];
public createDefaultFilters(appId: string): Observable<FilterRepresentationModel[]> {
let involvedTasksFilter = this.getInvolvedTasksFilterInstance(appId);
this.addFilter(involvedTasksFilter);
filters.push(involvedTasksFilter);
let involvedObservable = this.addFilter(involvedTasksFilter);
let myTasksFilter = this.getMyTasksFilterInstance(appId);
this.addFilter(myTasksFilter);
filters.push(myTasksFilter);
let myTaskObservable = this.addFilter(myTasksFilter);
let queuedTasksFilter = this.getQueuedTasksFilterInstance(appId);
this.addFilter(queuedTasksFilter);
filters.push(queuedTasksFilter);
let queuedObservable = this.addFilter(queuedTasksFilter);
let completedTasksFilter = this.getCompletedTasksFilterInstance(appId);
this.addFilter(completedTasksFilter);
filters.push(completedTasksFilter);
let completeObservable = this.addFilter(completedTasksFilter);
return filters;
return Observable.create(observer => {
Observable.forkJoin(
involvedObservable,
myTaskObservable,
queuedObservable,
completeObservable
).subscribe(
(res) => {
let filters: FilterRepresentationModel[] = [];
res.forEach((filter) => {
if (filter.name === involvedTasksFilter.name) {
filters.push(involvedTasksFilter);
} else if (filter.name === myTasksFilter.name) {
filters.push(myTasksFilter);
} else if (filter.name === queuedTasksFilter.name) {
filters.push(queuedTasksFilter);
} else if (filter.name === completedTasksFilter.name) {
filters.push(completedTasksFilter);
}
});
observer.next(filters);
observer.complete();
},
(err: any) => {
this.logService.error(err);
});
});
}
/**