diff --git a/ng2-components/ng2-alfresco-activiti-tasklist/src/assets/AlfrescoSettingsService.service.mock.ts b/ng2-components/ng2-alfresco-activiti-tasklist/src/assets/AlfrescoSettingsService.service.mock.ts deleted file mode 100644 index 593b36c19f..0000000000 --- a/ng2-components/ng2-alfresco-activiti-tasklist/src/assets/AlfrescoSettingsService.service.mock.ts +++ /dev/null @@ -1,36 +0,0 @@ -/*! - * @license - * Copyright 2016 Alfresco Software, Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Injectable } from '@angular/core'; - -@Injectable() -export class AlfrescoSettingsServiceMock { - - static DEFAULT_HOST_ADDRESS: string = 'fakehost'; - - private providers: string[] = ['ECM', 'BPM']; - - private _host: string = AlfrescoSettingsServiceMock.DEFAULT_HOST_ADDRESS; - - public get host(): string { - return this._host; - } - - getProviders(): string [] { - return this.providers; - } -} diff --git a/ng2-components/ng2-alfresco-activiti-tasklist/src/components/activiti-tasklist.component.spec.ts b/ng2-components/ng2-alfresco-activiti-tasklist/src/components/activiti-tasklist.component.spec.ts new file mode 100644 index 0000000000..a746afb4a1 --- /dev/null +++ b/ng2-components/ng2-alfresco-activiti-tasklist/src/components/activiti-tasklist.component.spec.ts @@ -0,0 +1,162 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + it, + describe, + expect, + beforeEach +} from '@angular/core/testing'; + +import { ActivitiTaskList } from './activiti-tasklist.component'; +import { ActivitiTaskListService } from '../services/activiti-tasklist.service'; +import { FilterModel } from '../models/filter.model'; +import { Observable } from 'rxjs/Rx'; + + +describe('ActivitiTaskList', () => { + + let taskList: ActivitiTaskList; + + let fakeGlobalFilter = { + 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 fakeGlobalTask = { + size: 1, total: 12, start: 0, + data: [ + { + id: 14, name: 'fake-long-name-fake-long-name-fake-long-name-fak50-long-name', description: null, category: null, + assignee: { + id: 1, firstName: null, lastName: 'Administrator', email: 'admin' + } + }, + { + id: 2, name: '', description: null, category: null, + assignee: { + id: 1, firstName: null, lastName: 'Administrator', email: 'admin' + } + } + ] + }; + + let fakeErrorTaskList = { + error: 'wrong request' + }; + + let fakeGlobalFilterPromise = new Promise(function (resolve, reject) { + resolve(fakeGlobalFilter); + }); + + let fakeGlobalTaskPromise = new Promise(function (resolve, reject) { + resolve(fakeGlobalTask); + }); + + let fakeErrorTaskPromise = new Promise(function (resolve, reject) { + reject(fakeErrorTaskList); + }); + + beforeEach(() => { + let activitiSerevice = new ActivitiTaskListService(null); + taskList = new ActivitiTaskList(null, null, activitiSerevice); + }); + + it('should return the default filters', (done) => { + spyOn(taskList.activiti, 'getTaskListFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise)); + taskList.ngOnInit(); + + taskList.filtersList.subscribe((res: any) => { + expect(res).toBeDefined(); + expect(res.size).toEqual(2); + expect(res.total).toEqual(2); + expect(res.data.length).toEqual(2); + expect(res.data[0].name).toEqual('FakeInvolvedTasks'); + expect(res.data[1].name).toEqual('FakeMyTasks'); + done(); + }); + }); + + it('should subscribe to Filter when a filter is selected', (done) => { + let filterModel: FilterModel = new FilterModel('name', false, 'icon', 'open', 'fake-assignee'); + taskList.filter$.subscribe((filter: FilterModel) => { + expect(filter).toBe(filterModel); + done(); + }); + taskList.selectFilter(filterModel); + }); + + it('should return the tasks when a filter is selected', (done) => { + spyOn(taskList.activiti, 'getTasks').and.returnValue(Observable.fromPromise(fakeGlobalTaskPromise)); + spyOn(taskList.activiti, 'getTaskListFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise)); + taskList.ngOnInit(); + + let filterModel: FilterModel = new FilterModel('name', false, 'icon', 'open', 'fake-assignee'); + taskList.selectFilter(filterModel); + + taskList.activiti.getTasks(filterModel).subscribe( + (res) => { + expect(res).toBeDefined(); + done(); + }); + }); + + it('should throw an exception when the response is wrong', (done) => { + spyOn(taskList.activiti, 'getTasks').and.returnValue(Observable.fromPromise(fakeErrorTaskPromise)); + spyOn(taskList.activiti, 'getTaskListFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise)); + taskList.ngOnInit(); + + let filterModel: FilterModel = new FilterModel('name', false, 'icon', 'open', 'fake-assignee'); + taskList.selectFilter(filterModel); + + taskList.activiti.getTasks(filterModel).subscribe( + (res) => { + expect(res).toBeUndefined(); + }, + (err: any) => { + expect(err).toBeDefined(); + expect(err.error).toEqual('wrong request'); + done(); + }); + }); + + it('should optimize the task name when are empty or exceed 50 characters', (done) => { + spyOn(taskList.activiti, 'getTasks').and.returnValue(Observable.fromPromise(fakeGlobalTaskPromise)); + spyOn(taskList.activiti, 'getTaskListFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise)); + taskList.ngOnInit(); + + let filterModel: FilterModel = new FilterModel('name', false, 'icon', 'open', 'fake-assignee'); + taskList.selectFilter(filterModel); + + taskList.activiti.getTasks(filterModel).subscribe( + (res) => { + expect(res.data[0].name).toEqual('fake-long-name-fake-long-name-fake-long-name-fak50...'); + expect(res.data[1].name).toEqual('Nameless task'); + done(); + }); + }); + +}); diff --git a/ng2-components/ng2-alfresco-activiti-tasklist/src/components/activiti-tasklist.component.ts b/ng2-components/ng2-alfresco-activiti-tasklist/src/components/activiti-tasklist.component.ts index 34b56a31f7..0a9ff59e55 100644 --- a/ng2-components/ng2-alfresco-activiti-tasklist/src/components/activiti-tasklist.component.ts +++ b/ng2-components/ng2-alfresco-activiti-tasklist/src/components/activiti-tasklist.component.ts @@ -53,20 +53,25 @@ export class ActivitiTaskList implements OnInit { */ constructor(private auth: AlfrescoAuthenticationService, private translate: AlfrescoTranslationService, - private activiti: ActivitiTaskListService) { + public activiti: ActivitiTaskListService) { this.filter$ = new Observable(observer => this.filterObserver = observer).share(); - translate.addTranslationFolder('node_modules/ng2-alfresco-activiti-tasklist'); + if (translate) { + translate.addTranslationFolder('node_modules/ng2-alfresco-activiti-tasklist'); + } } ngOnInit() { - this.filtersList = this.activiti.getTaskListFilters().map(res => (res.data)); + this.filtersList = this.activiti.getTaskListFilters(); - this.filter$.subscribe( (filter: FilterModel) => { - this.activiti.getTasks(filter).subscribe((res) => { - let tasks = res.data; - this.loadTasks(tasks); - }); + this.filter$.subscribe((filter: FilterModel) => { + this.activiti.getTasks(filter).subscribe( + (res) => { + let tasks = res.data; + this.loadTasks(tasks); + }, (err) => { + console.error(err); + }); }); } diff --git a/ng2-components/ng2-alfresco-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts b/ng2-components/ng2-alfresco-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts index 9fc30e894f..159fbf8b98 100644 --- a/ng2-components/ng2-alfresco-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts +++ b/ng2-components/ng2-alfresco-activiti-tasklist/src/services/activiti-tasklist.service.spec.ts @@ -18,7 +18,6 @@ import { it, describe, inject, beforeEach, beforeEachProviders } from '@angular/core/testing'; import { ActivitiTaskListService } from './activiti-tasklist.service'; import { AlfrescoSettingsService, AlfrescoAuthenticationService } from 'ng2-alfresco-core'; -import { AlfrescoSettingsServiceMock } from '../assets/AlfrescoSettingsService.service.mock'; import { HTTP_PROVIDERS } from '@angular/http'; declare let AlfrescoApi: any; @@ -40,8 +39,8 @@ describe('AlfrescoUploadService', () => { beforeEachProviders(() => { return [ HTTP_PROVIDERS, - { provide: AlfrescoSettingsService, useClass: AlfrescoSettingsServiceMock }, - { provide: AlfrescoAuthenticationService, useClass: AlfrescoAuthenticationService }, + AlfrescoSettingsService, + AlfrescoAuthenticationService, ActivitiTaskListService ]; }); @@ -157,8 +156,6 @@ describe('AlfrescoUploadService', () => { expect(err.error).toEqual('wrong request'); done(); }); - - }); }); diff --git a/ng2-components/ng2-alfresco-activiti-tasklist/src/services/activiti-tasklist.service.ts b/ng2-components/ng2-alfresco-activiti-tasklist/src/services/activiti-tasklist.service.ts index f1afbeb47d..9645ba72fc 100644 --- a/ng2-components/ng2-alfresco-activiti-tasklist/src/services/activiti-tasklist.service.ts +++ b/ng2-components/ng2-alfresco-activiti-tasklist/src/services/activiti-tasklist.service.ts @@ -30,8 +30,10 @@ export class ActivitiTaskListService { * Retrive all the Tasks filters * @returns {Observable} */ - getTaskListFilters() { - return this.callApiTaskFilters(); + getTaskListFilters(): Observable { + return Observable.fromPromise(this.callApiTaskFilters()) + .map((res: Response) => res.json()) + .catch(this.handleError); } /** @@ -49,7 +51,7 @@ export class ActivitiTaskListService { .catch(this.handleError); } - private callApiTasksFiltered(data: Object): Observable { + private callApiTasksFiltered(data: Object) { let url = 'http://localhost:9999/activiti-app/app/rest/filter/tasks'; let headers = new Headers({ 'Content-Type': 'application/json', @@ -58,10 +60,10 @@ export class ActivitiTaskListService { let options = new RequestOptions({headers: headers}); return this.http - .post(url, data, options); + .post(url, data, options).toPromise(); } - private callApiTaskFilters(): Observable { + private callApiTaskFilters() { let url = 'http://localhost:9999/activiti-app/app/rest/filters/tasks'; let headers = new Headers({ 'Content-Type': 'application/json', @@ -70,9 +72,7 @@ export class ActivitiTaskListService { let options = new RequestOptions({headers: headers}); return this.http - .get(url, options) - .map((res: Response) => res.json()) - .catch(this.handleError); + .get(url, options).toPromise(); }