diff --git a/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts b/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts index 0a52b56b39..357ff8d23d 100644 --- a/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts +++ b/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts @@ -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' + }) + }); + }); + + + }); diff --git a/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.ts b/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.ts index 96f5f08eda..5f9e4bb6fa 100644 --- a/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.ts +++ b/ng2-components/ng2-activiti-tasklist/src/services/activiti-tasklist.service.ts @@ -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 { - 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 {} + */ getTaskDetails(id: string): Observable { 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 {} + */ getTaskComments(id: string): Observable { 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 { - 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 { - 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 { 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 { + 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 { + 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 { 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'