Unit test task list service

This commit is contained in:
mauriziovitale84 2016-07-29 11:12:48 +01:00
parent e94c0b0e41
commit ff95dd57cd
2 changed files with 278 additions and 123 deletions

View File

@ -19,21 +19,79 @@ import { it, describe, inject, beforeEach, beforeEachProviders } from '@angular/
import { ActivitiTaskListService } from './activiti-tasklist.service';
import { AlfrescoSettingsService, AlfrescoAuthenticationService } from 'ng2-alfresco-core';
import { HTTP_PROVIDERS } from '@angular/http';
import { TaskDetailsModel } from '../models/task-details.model';
import { Comment } from '../models/comment.model';
declare let AlfrescoApi: any;
declare let jasmine: any;
describe('ActivitiTaskListService', () => {
let service, options: any;
let service: any;
options = {
host: 'fakehost',
url: '/some/cool/url',
baseUrlPath: 'fakebasepath',
formFields: {
siteid: 'fakeSite',
containerid: 'fakeFolder'
}
let fakeFilters = {
size: 2, total: 2, start: 0,
data: [
{
id: 1, name: 'FakeInvolvedTasks', recent: false, icon: 'glyphicon-align-left',
filter: {sort: 'created-desc', name: '', state: 'open', assignment: 'fake-involved'}
},
{
id: 2, name: 'FakeMyTasks', recent: false, icon: 'glyphicon-align-left',
filter: {sort: 'created-desc', name: '', state: 'open', assignment: 'fake-assignee'}
}
]
};
let fakeFilter = {
page: 2, filterId: 2, appDefinitionId: null,
filter: {sort: 'created-desc', name: '', state: 'open', assignment: 'fake-assignee' }
};
let fakeUser = { id: 1, email: 'fake-email@dom.com', firstName: 'firstName', lastName: 'lastName' };
let fakeTaskList = {
size: 1, total: 1, start: 0,
data: [
{
id: 1, name: 'FakeNameTask', description: null, category: null,
assignee: fakeUser,
created: '2016-07-15T11:19:17.440+0000'
}
]
};
let fakeErrorTaskList = {
error: 'wrong request'
};
let fakeTaskDetails = {id: '999', name: 'fake-task-name', formKey: '99', assignee: fakeUser };
let fakeTasksComment = {
size: 2, total: 2, start: 0,
data: [
{
id: 1, message: 'fake-message-1', created: '', createdBy: fakeUser
},
{
id: 2, message: 'fake-message-2', created: '', createdBy: fakeUser
}
]
};
let fakeTasksChecklist = {
size: 1, total: 1, start: 0,
data: [
{
id: 1, name: 'FakeCheckTask1', description: null, category: null,
assignee: fakeUser,
created: '2016-07-15T11:19:17.440+0000'
},
{
id: 2, name: 'FakeCheckTask2', description: null, category: null,
assignee: fakeUser,
created: '2016-07-15T11:19:17.440+0000'
}
]
};
beforeEachProviders(() => {
@ -55,67 +113,37 @@ describe('ActivitiTaskListService', () => {
});
it('should return the task list filters', (done) => {
let fakeFilter = {
size: 2, total: 2, start: 0,
data: [
{
id: 1, name: 'FakeInvolvedTasks', recent: false, icon: 'glyphicon-align-left',
filter: {sort: 'created-desc', name: '', state: 'open', assignment: 'fake-involved'}
},
{
id: 2, name: 'FakeMyTasks', recent: false, icon: 'glyphicon-align-left',
filter: {sort: 'created-desc', name: '', state: 'open', assignment: 'fake-assignee'}
}
]
};
let filters = service.getTaskListFilters();
filters.subscribe(res => {
expect(res).toBeDefined();
expect(res.length).toEqual(2);
expect(res[0].name).toEqual('FakeInvolvedTasks');
expect(res[1].name).toEqual('FakeMyTasks');
done();
});
service.getTaskListFilters().subscribe(
(res) => {
expect(res).toBeDefined();
expect(res.length).toEqual(2);
expect(res[0].name).toEqual('FakeInvolvedTasks');
expect(res[1].name).toEqual('FakeMyTasks');
done();
}
);
jasmine.Ajax.requests.mostRecent().respondWith({
'status': 200,
contentType: 'application/json',
responseText: JSON.stringify(fakeFilter)
responseText: JSON.stringify(fakeFilters)
});
});
it('should return the task list filtered', (done) => {
let fakeTaskList = {
size: 1, total: 1, start: 0,
data: [
{
id: 1, name: 'FakeNameTask', description: null, category: null,
assignee: {
id: 1,
firstName: null,
lastName: 'Fake Admin',
email: 'fake-admin'
},
created: '2016-07-15T11:19:17.440+0000'
}
]
};
let fakeFilter = {
page: 2, filterId: 2, appDefinitionId: null,
filter: {sort: 'created-desc', name: '', state: 'open', assignment: 'fake-assignee'}
};
let taskList = service.getTasks(fakeFilter);
taskList.subscribe(res => {
expect(res).toBeDefined();
expect(res.size).toEqual(1);
expect(res.total).toEqual(1);
expect(res.data.length).toEqual(1);
expect(res.data[0].name).toEqual('FakeNameTask');
done();
});
service.getTasks(fakeFilter).subscribe(
res => {
expect(res).toBeDefined();
expect(res.size).toEqual(1);
expect(res.total).toEqual(1);
expect(res.data.length).toEqual(1);
expect(res.data[0].name).toEqual('FakeNameTask');
expect(res.data[0].assignee.email).toEqual('fake-email@dom.com');
expect(res.data[0].assignee.firstName).toEqual('firstName');
expect(res.data[0].assignee.lastName).toEqual('lastName');
done();
}
);
jasmine.Ajax.requests.mostRecent().respondWith({
'status': 200,
@ -124,36 +152,141 @@ describe('ActivitiTaskListService', () => {
});
});
it('should throw an exception when the response is wrong', (done) => {
let fakeTaskList = {
error: 'wrong request'
};
let fakeFilter = {
page: 2, filterId: 2, appDefinitionId: null,
wrongfilter: {sort: 'created-desc', name: '', state: 'open', assignment: 'fake-assignee'}
};
let fakePromise = new Promise(function (resolve, reject) {
reject(fakeTaskList);
});
spyOn(service, 'callApiTasksFiltered').and.returnValue(fakePromise);
let taskList = service.getTasks(fakeFilter);
service.getTasks(fakeFilter).subscribe((res) => {
let tasks = res.data;
service.loadTasks(tasks);
});
taskList.subscribe(
it('should throw an exception when the response is wrong', () => {
service.getTasks(fakeFilter).subscribe(
(res) => {
},
(err: any) => {
expect(err).toBeDefined();
expect(err.error).toEqual('wrong request');
done();
});
expect(err._body).toEqual('{"error":"wrong request"}');
}
);
jasmine.Ajax.requests.mostRecent().respondWith({
'status': 404,
contentType: 'application/json',
responseText: JSON.stringify(fakeErrorTaskList)
});
});
it('should return the task details ', (done) => {
service.getTaskDetails(999).subscribe(
(res: TaskDetailsModel) => {
expect(res).toBeDefined();
expect(res.id).toEqual('999');
expect(res.name).toEqual('fake-task-name');
expect(res.formKey).toEqual('99');
expect(res.assignee).toBeDefined();
expect(res.assignee.email).toEqual('fake-email@dom.com');
expect(res.assignee.firstName).toEqual('firstName');
expect(res.assignee.lastName).toEqual('lastName');
done();
}
);
jasmine.Ajax.requests.mostRecent().respondWith({
'status': 200,
contentType: 'application/json',
responseText: JSON.stringify(fakeTaskDetails)
});
});
it('should return the tasks comments ', (done) => {
service.getTaskComments(999).subscribe(
(res: Comment[]) => {
expect(res).toBeDefined();
expect(res.length).toEqual(2);
expect(res[0].message).toEqual('fake-message-1');
expect(res[1].message).toEqual('fake-message-2');
done();
}
);
jasmine.Ajax.requests.mostRecent().respondWith({
'status': 200,
contentType: 'application/json',
responseText: JSON.stringify(fakeTasksComment)
});
});
it('should return the tasks checklists ', (done) => {
service.getTaskChecklist(999).subscribe(
(res: TaskDetailsModel[]) => {
expect(res).toBeDefined();
expect(res.length).toEqual(2);
expect(res[0].name).toEqual('FakeCheckTask1');
expect(res[0].assignee.email).toEqual('fake-email@dom.com');
expect(res[0].assignee.firstName).toEqual('firstName');
expect(res[0].assignee.lastName).toEqual('lastName');
expect(res[1].name).toEqual('FakeCheckTask2');
expect(res[1].assignee.email).toEqual('fake-email@dom.com');
expect(res[1].assignee.firstName).toEqual('firstName');
expect(res[0].assignee.lastName).toEqual('lastName');
done();
}
);
jasmine.Ajax.requests.mostRecent().respondWith({
'status': 200,
contentType: 'application/json',
responseText: JSON.stringify(fakeTasksChecklist)
});
});
it('should add a task ', (done) => {
let taskFake = new TaskDetailsModel({
id: '', name: 'FakeNameTask', description: null, category: null,
assignee: fakeUser,
created: ''
});
service.addTask(taskFake).subscribe(
(res: TaskDetailsModel) => {
expect(res).toBeDefined();
expect(res.id).not.toEqual('');
expect(res.name).toEqual('FakeNameTask');
expect(res.created).not.toEqual('');
done();
}
);
jasmine.Ajax.requests.mostRecent().respondWith({
'status': 200,
contentType: 'application/json',
responseText: JSON.stringify({
id: '777', name: 'FakeNameTask', description: null, category: null,
assignee: fakeUser,
created: '2016-07-15T11:19:17.440+0000'
})
});
});
it('should add a comment task ', (done) => {
service.addTaskComment(999, 'fake-comment-message').subscribe(
(res: Comment) => {
expect(res).toBeDefined();
expect(res.id).not.toEqual('');
expect(res.message).toEqual('fake-comment-message');
expect(res.created).not.toEqual('');
expect(res.createdBy.email).toEqual('fake-email@dom.com');
expect(res.createdBy.firstName).toEqual('firstName');
expect(res.createdBy.lastName).toEqual('lastName');
done();
}
);
jasmine.Ajax.requests.mostRecent().respondWith({
'status': 200,
contentType: 'application/json',
responseText: JSON.stringify({
id: '111', message: 'fake-comment-message',
createdBy: fakeUser,
created: '2016-07-15T11:19:17.440+0000'
})
});
});
});

View File

@ -20,6 +20,7 @@ import { AlfrescoSettingsService } from 'ng2-alfresco-core';
import { Http, Headers, RequestOptions, Response } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import { FilterModel } from '../models/filter.model';
import { FilterParamsModel } from '../models/filter.model';
import { Comment } from '../models/comment.model';
import { User } from '../models/user.model';
@ -51,25 +52,24 @@ export class ActivitiTaskListService {
}
/**
* Retrive all the tasks created in activiti
* Retrive all the tasks filtered by filterModel
* @param filter - FilterModel
* @returns {any}
*/
getTasks(filter: FilterModel): Observable<any> {
let data: any = {};
// data.filterId = filter.id;
// data.filter = filter.filter;
data = filter.filter;
// data.text = filter.filter.name;
data = JSON.stringify(data);
return Observable.fromPromise(this.callApiTasksFiltered(data))
return Observable.fromPromise(this.callApiTasksFiltered(filter.filter))
.map((res: Response) => {
return res.json();
})
.catch(this.handleError);
}
/**
* Retrive all the task details
* @param id - taskId
* @returns {<TaskDetailsModel>}
*/
getTaskDetails(id: string): Observable<TaskDetailsModel> {
return Observable.fromPromise(this.callApiTaskDetails(id))
.map(res => res.json())
@ -79,6 +79,11 @@ export class ActivitiTaskListService {
.catch(this.handleError);
}
/**
* Retrive all the task's comments
* @param id - taskId
* @returns {<Comment[]>}
*/
getTaskComments(id: string): Observable<Comment[]> {
return Observable.fromPromise(this.callApiTaskComments(id))
.map(res => res.json())
@ -94,24 +99,11 @@ export class ActivitiTaskListService {
.catch(this.handleError);
}
addTaskComment(id: string, message: string): Observable<Comment> {
return Observable.fromPromise(this.callApiAddTaskComment(id, message))
.map(res => res.json())
.map((response: Comment) => {
return new Comment(response.id, response.message, response.created, response.createdBy);
})
.catch(this.handleError);
}
addTask(task: TaskDetailsModel): Observable<TaskDetailsModel> {
return Observable.fromPromise(this.callApiAddTask(task))
.map(res => res.json())
.map((response: TaskDetailsModel) => {
return new TaskDetailsModel(response);
})
.catch(this.handleError);
}
/**
* Retrive all the task's checklist
* @param id - taskId
* @returns {TaskDetailsModel}
*/
getTaskChecklist(id: string): Observable<TaskDetailsModel[]> {
return Observable.fromPromise(this.callApiTaskChecklist(id))
.map(res => res.json())
@ -125,19 +117,52 @@ export class ActivitiTaskListService {
.catch(this.handleError);
}
/**
* Add a task
* @param task - TaskDetailsModel
* @returns {TaskDetailsModel}
*/
addTask(task: TaskDetailsModel): Observable<TaskDetailsModel> {
return Observable.fromPromise(this.callApiAddTask(task))
.map(res => res.json())
.map((response: TaskDetailsModel) => {
return new TaskDetailsModel(response);
})
.catch(this.handleError);
}
/**
* Add a comment to a task
* @param id - taskId
* @param message - content of the comment
* @returns {Comment}
*/
addTaskComment(id: string, message: string): Observable<Comment> {
return Observable.fromPromise(this.callApiAddTaskComment(id, message))
.map(res => res.json())
.map((response: Comment) => {
return new Comment(response.id, response.message, response.created, response.createdBy);
})
.catch(this.handleError);
}
/**
* Make the task completed
* @param id - taskId
* @returns {TaskDetailsModel}
*/
completeTask(id: string): Observable<TaskDetailsModel> {
return Observable.fromPromise(this.callApiCompleteTask(id))
.catch(this.handleError);
}
private callApiTasksFiltered(data: Object) {
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + '/api/enterprise/tasks/query';
// let url = 'http://localhost:9999/activiti-app/app/rest/filter/tasks';
private callApiTasksFiltered(filter: FilterParamsModel) {
let data = JSON.stringify(filter);
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/query`;
let headers = new Headers({
'Content-Type': 'application/json',
'Cache-Control': 'no-cache'
});
// let body = JSON.stringify(data);
let options = new RequestOptions({headers: headers});
return this.http
@ -145,8 +170,7 @@ export class ActivitiTaskListService {
}
private callApiTaskFilters() {
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + '/api/enterprise/filters/tasks';
// let url = 'http://localhost:9999/activiti-app/app/rest/filters/tasks';
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/filters/tasks`;
let headers = new Headers({
'Content-Type': 'application/json',
'Cache-Control': 'no-cache'
@ -159,7 +183,6 @@ export class ActivitiTaskListService {
private callApiTaskDetails(id: string) {
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${id}`;
// let url = 'http://localhost:9999/activiti-app/app/rest/tasks/' + id;
let headers = new Headers({
'Content-Type': 'application/json',
'Cache-Control': 'no-cache'
@ -222,7 +245,6 @@ export class ActivitiTaskListService {
private callApiCompleteTask(id: string) {
let url = this.alfrescoSettingsService.getBPMApiBaseUrl() + `/api/enterprise/tasks/${id}/action/complete`;
// let url = `http://localhost:9999/activiti-app/app/rest/tasks/${id}/action/complete`;
let headers = new Headers({
'Content-Type': 'application/json',
'Cache-Control': 'no-cache'