mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-12 17:04:57 +00:00
[ADF-1143] [TaskList] - Not able to start a task when changing the assignee from the 'Start Task' form (#2164)
* [ADF-1143] [TaskList] - Not able to start a task when changing the assignee from the 'Start Task' form * Create task has been split into three diffrent service calls to replicate the ecxact behaviour of APS * Current API call sequence is create-task -> attach-form -> assign-user * Added a new service assign task * Modified tests according to the API calls * [ADF-1143] [TaskList] - Not able to start a task when changing the assignee from the 'Start Task' form * Added responsive behaviour for APIs * [ADF-1143] [TaskList] - Not able to start a task when changing the assignee from the 'Start Task' form *Code refactoring
This commit is contained in:
parent
c85bf05cb2
commit
152e7805bc
@ -18,9 +18,9 @@
|
|||||||
export let startTaskMock = {
|
export let startTaskMock = {
|
||||||
'name': 'fakeName',
|
'name': 'fakeName',
|
||||||
'description': 'fakeDescription',
|
'description': 'fakeDescription',
|
||||||
'assignee': {'id': 2001, 'firstName': 'Jhon', 'lastName': 'Adams', 'email': 'jhon@app.activiti.com'},
|
'assignee': null,
|
||||||
'dueDate': '2017-11-03T15:25:42.749+0000',
|
'dueDate': '2017-11-03T15:25:42.749+0000',
|
||||||
'formKey': '11201',
|
'formKey': null,
|
||||||
'category': 'fakeAppId'
|
'category': 'fakeAppId'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -68,14 +68,16 @@ export let fakeFilterWithProcessDefinitionKey = {
|
|||||||
sort: 'created-desc', text: '', state: 'open', assignment: 'fake-assignee', processDefinitionKey: '1'
|
sort: 'created-desc', text: '', state: 'open', assignment: 'fake-assignee', processDefinitionKey: '1'
|
||||||
};
|
};
|
||||||
|
|
||||||
export let fakeUser = { id: 1, email: 'fake-email@dom.com', firstName: 'firstName', lastName: 'lastName' };
|
export let fakeUser1 = { id: 1, email: 'fake-email@dom.com', firstName: 'firstName', lastName: 'lastName' };
|
||||||
|
|
||||||
|
export let fakeUser2 = { id: 1001, email: 'some-one@somegroup.com', firstName: 'some', lastName: 'one' };
|
||||||
|
|
||||||
export let fakeTaskList = {
|
export let fakeTaskList = {
|
||||||
size: 1, total: 1, start: 0,
|
size: 1, total: 1, start: 0,
|
||||||
data: [
|
data: [
|
||||||
{
|
{
|
||||||
id: '1', name: 'FakeNameTask', description: null, category: null,
|
id: '1', name: 'FakeNameTask', description: null, category: null,
|
||||||
assignee: fakeUser,
|
assignee: fakeUser1,
|
||||||
created: '2016-07-15T11:19:17.440+0000'
|
created: '2016-07-15T11:19:17.440+0000'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -86,13 +88,13 @@ export let fakeTaskListDifferentProcessDefinitionKey = {
|
|||||||
data: [
|
data: [
|
||||||
{
|
{
|
||||||
id: '1', name: 'FakeNameTask', description: null, category: null,
|
id: '1', name: 'FakeNameTask', description: null, category: null,
|
||||||
assignee: fakeUser,
|
assignee: fakeUser1,
|
||||||
processDefinitionKey: '1',
|
processDefinitionKey: '1',
|
||||||
created: '2016-07-15T11:19:17.440+0000'
|
created: '2016-07-15T11:19:17.440+0000'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '2', name: 'FakeNameTask2', description: null, category: null,
|
id: '2', name: 'FakeNameTask2', description: null, category: null,
|
||||||
assignee: fakeUser,
|
assignee: fakeUser1,
|
||||||
processDefinitionKey: '2',
|
processDefinitionKey: '2',
|
||||||
created: '2016-07-15T11:19:17.440+0000'
|
created: '2016-07-15T11:19:17.440+0000'
|
||||||
}
|
}
|
||||||
@ -104,7 +106,7 @@ export let secondFakeTaskList = {
|
|||||||
data: [
|
data: [
|
||||||
{
|
{
|
||||||
id: '200', name: 'FakeNameTask', description: null, category: null,
|
id: '200', name: 'FakeNameTask', description: null, category: null,
|
||||||
assignee: fakeUser,
|
assignee: fakeUser1,
|
||||||
created: '2016-07-15T11:19:17.440+0000'
|
created: '2016-07-15T11:19:17.440+0000'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -114,16 +116,16 @@ export let fakeErrorTaskList = {
|
|||||||
error: 'wrong request'
|
error: 'wrong request'
|
||||||
};
|
};
|
||||||
|
|
||||||
export let fakeTaskDetails = { id: '999', name: 'fake-task-name', formKey: '99', assignee: fakeUser };
|
export let fakeTaskDetails = { id: '999', name: 'fake-task-name', formKey: '99', assignee: fakeUser1 };
|
||||||
|
|
||||||
export let fakeTasksComment = {
|
export let fakeTasksComment = {
|
||||||
size: 2, total: 2, start: 0,
|
size: 2, total: 2, start: 0,
|
||||||
data: [
|
data: [
|
||||||
{
|
{
|
||||||
id: 1, message: 'fake-message-1', created: '', createdBy: fakeUser
|
id: 1, message: 'fake-message-1', created: '', createdBy: fakeUser1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2, message: 'fake-message-2', created: '', createdBy: fakeUser
|
id: 2, message: 'fake-message-2', created: '', createdBy: fakeUser1
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
@ -133,12 +135,12 @@ export let fakeTasksChecklist = {
|
|||||||
data: [
|
data: [
|
||||||
{
|
{
|
||||||
id: 1, name: 'FakeCheckTask1', description: null, category: null,
|
id: 1, name: 'FakeCheckTask1', description: null, category: null,
|
||||||
assignee: fakeUser,
|
assignee: fakeUser1,
|
||||||
created: '2016-07-15T11:19:17.440+0000'
|
created: '2016-07-15T11:19:17.440+0000'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2, name: 'FakeCheckTask2', description: null, category: null,
|
id: 2, name: 'FakeCheckTask2', description: null, category: null,
|
||||||
assignee: fakeUser,
|
assignee: fakeUser1,
|
||||||
created: '2016-07-15T11:19:17.440+0000'
|
created: '2016-07-15T11:19:17.440+0000'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
<md-datepicker #taskDatePicker [touchUi]="true"></md-datepicker>
|
<md-datepicker #taskDatePicker [touchUi]="true"></md-datepicker>
|
||||||
</md-grid-tile>
|
</md-grid-tile>
|
||||||
<md-grid-tile>
|
<md-grid-tile>
|
||||||
<md-select placeholder="{{'START_TASK.FORM.LABEL.ASSIGNEE'|translate}}" id="assignee_id" class="adf-start-task-input-container" [(ngModel)]="startTaskmodel.assignee">
|
<md-select placeholder="{{'START_TASK.FORM.LABEL.ASSIGNEE'|translate}}" id="assignee_id" class="adf-start-task-input-container" [(ngModel)]="assignee">
|
||||||
<md-option>{{'START_TASK.FORM.LABEL.NONE'|translate}}</md-option>
|
<md-option>{{'START_TASK.FORM.LABEL.NONE'|translate}}</md-option>
|
||||||
<span *ngFor="let user of people">
|
<span *ngFor="let user of people">
|
||||||
<md-option [value]="user" *ngIf="!isUserNameEmpty(user)">{{ getDisplayUser(user.firstName, user.lastName, ' ')}}</md-option>
|
<md-option [value]="user" *ngIf="!isUserNameEmpty(user)">{{ getDisplayUser(user.firstName, user.lastName, ' ')}}</md-option>
|
||||||
@ -44,7 +44,7 @@
|
|||||||
</md-grid-list>
|
</md-grid-list>
|
||||||
<md-grid-list cols="2" rowHeight="80px">
|
<md-grid-list cols="2" rowHeight="80px">
|
||||||
<md-grid-tile>
|
<md-grid-tile>
|
||||||
<md-select placeholder="{{'START_TASK.FORM.LABEL.FORM'|translate}}" id="form_id" [(ngModel)]="startTaskmodel.formKey" class="adf-start-task-input-container">
|
<md-select placeholder="{{'START_TASK.FORM.LABEL.FORM'|translate}}" id="form_id" [(ngModel)]="formKey" class="adf-start-task-input-container">
|
||||||
<md-option>{{'START_TASK.FORM.LABEL.NONE'|translate}}</md-option>
|
<md-option>{{'START_TASK.FORM.LABEL.NONE'|translate}}</md-option>
|
||||||
<md-option *ngFor="let form of forms" [value]="form.id">{{ form.name }}</md-option>
|
<md-option *ngFor="let form of forms" [value]="form.id">{{ form.name }}</md-option>
|
||||||
</md-select>
|
</md-select>
|
||||||
|
@ -20,6 +20,7 @@ import { MdButtonModule, MdDatepickerModule, MdGridListModule, MdIconModule, MdI
|
|||||||
import { AlfrescoTranslationService, CoreModule } from 'ng2-alfresco-core';
|
import { AlfrescoTranslationService, CoreModule } from 'ng2-alfresco-core';
|
||||||
import { Observable } from 'rxjs/Rx';
|
import { Observable } from 'rxjs/Rx';
|
||||||
import { StartTaskModel } from '../models/start-task.model';
|
import { StartTaskModel } from '../models/start-task.model';
|
||||||
|
import { User } from '../models/user.model';
|
||||||
import { PeopleService } from '../services/people.service';
|
import { PeopleService } from '../services/people.service';
|
||||||
import { TaskListService } from '../services/tasklist.service';
|
import { TaskListService } from '../services/tasklist.service';
|
||||||
import { startTaskMock } from './../assets/start-task.mock';
|
import { startTaskMock } from './../assets/start-task.mock';
|
||||||
@ -34,9 +35,11 @@ describe('StartTaskComponent', () => {
|
|||||||
let service: TaskListService;
|
let service: TaskListService;
|
||||||
let peopleService: PeopleService;
|
let peopleService: PeopleService;
|
||||||
let element: HTMLElement;
|
let element: HTMLElement;
|
||||||
let getformlistSpy: jasmine.Spy;
|
let getFormlistSpy: jasmine.Spy;
|
||||||
let getWorkflowUsersSpy: jasmine.Spy;
|
let getWorkflowUsersSpy: jasmine.Spy;
|
||||||
let getcreateNewTaskSpy: jasmine.Spy;
|
let createNewTaskSpy: jasmine.Spy;
|
||||||
|
let attachFormSpy: jasmine.Spy;
|
||||||
|
let assignUserSpy: jasmine.Spy;
|
||||||
let fakeForms = [
|
let fakeForms = [
|
||||||
{
|
{
|
||||||
id: 123,
|
id: 123,
|
||||||
@ -47,6 +50,7 @@ describe('StartTaskComponent', () => {
|
|||||||
name: 'Employee Info'
|
name: 'Employee Info'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
let testUser = {id: 1001, firstName: 'fakeName', email: 'fake@app.activiti.com'};
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [
|
imports: [
|
||||||
@ -81,7 +85,7 @@ describe('StartTaskComponent', () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
service = fixture.debugElement.injector.get(TaskListService);
|
service = fixture.debugElement.injector.get(TaskListService);
|
||||||
peopleService = fixture.debugElement.injector.get(PeopleService);
|
peopleService = fixture.debugElement.injector.get(PeopleService);
|
||||||
getformlistSpy = spyOn(service, 'getFormList').and.returnValue(Observable.of(fakeForms));
|
getFormlistSpy = spyOn(service, 'getFormList').and.returnValue(Observable.of(fakeForms));
|
||||||
getWorkflowUsersSpy = spyOn(peopleService, 'getWorkflowUsers').and.returnValue(Observable.of([
|
getWorkflowUsersSpy = spyOn(peopleService, 'getWorkflowUsers').and.returnValue(Observable.of([
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
@ -111,37 +115,30 @@ describe('StartTaskComponent', () => {
|
|||||||
expect(activitiStartTaskComponent.forms[0].name).toEqual('Display Data');
|
expect(activitiStartTaskComponent.forms[0].name).toEqual('Display Data');
|
||||||
expect(activitiStartTaskComponent.forms[1].name).toEqual('Employee Info');
|
expect(activitiStartTaskComponent.forms[1].name).toEqual('Employee Info');
|
||||||
expect(activitiStartTaskComponent.forms[1].id).toEqual(1111);
|
expect(activitiStartTaskComponent.forms[1].id).toEqual(1111);
|
||||||
expect(getformlistSpy).toHaveBeenCalled();
|
expect(getFormlistSpy).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('create task', () => {
|
describe('create task', () => {
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jasmine.Ajax.install();
|
createNewTaskSpy = spyOn(service, 'createNewTask').and.returnValue(Observable.of(
|
||||||
getcreateNewTaskSpy = spyOn(service, 'createNewTask').and.returnValue(Observable.of(
|
|
||||||
{
|
{
|
||||||
id: 91,
|
id: 91,
|
||||||
name: 'fakeName',
|
name: 'fakeName',
|
||||||
formKey: '4',
|
formKey: null,
|
||||||
assignee: {id: 1001, firstName: 'fakeName', email: 'fake@app.activiti.com'}
|
assignee: null
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jasmine.Ajax.uninstall();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create new task when start is clicked', async(() => {
|
it('should create new task when start is clicked', async(() => {
|
||||||
activitiStartTaskComponent.success.subscribe((res) => {
|
activitiStartTaskComponent.success.subscribe((res) => {
|
||||||
expect(res).toBeDefined();
|
expect(res).toBeDefined();
|
||||||
});
|
});
|
||||||
activitiStartTaskComponent.appId = 'fakeAppId';
|
activitiStartTaskComponent.appId = 'fakeAppId';
|
||||||
activitiStartTaskComponent.startTaskmodel = new StartTaskModel(startTaskMock);
|
activitiStartTaskComponent.startTaskmodel = new StartTaskModel(startTaskMock);
|
||||||
activitiStartTaskComponent.start();
|
let createTaskButton = <HTMLElement> element.querySelector('#button-start');
|
||||||
jasmine.Ajax.requests.mostRecent().respondWith({
|
createTaskButton.click();
|
||||||
'status': 200
|
|
||||||
});
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should send on success event when the task is started', async(() => {
|
it('should send on success event when the task is started', async(() => {
|
||||||
@ -149,30 +146,13 @@ describe('StartTaskComponent', () => {
|
|||||||
expect(res).toBeDefined();
|
expect(res).toBeDefined();
|
||||||
expect(res.id).toBe(91);
|
expect(res.id).toBe(91);
|
||||||
expect(res.name).toBe('fakeName');
|
expect(res.name).toBe('fakeName');
|
||||||
expect(res.formKey).toBe('4');
|
expect(res.formKey).toBe(null);
|
||||||
expect(res.assignee.id).toBe(1001);
|
expect(res.assignee).toBe(null);
|
||||||
});
|
});
|
||||||
activitiStartTaskComponent.appId = 'fakeAppId';
|
activitiStartTaskComponent.appId = 'fakeAppId';
|
||||||
activitiStartTaskComponent.startTaskmodel = new StartTaskModel(startTaskMock);
|
activitiStartTaskComponent.startTaskmodel = new StartTaskModel(startTaskMock);
|
||||||
activitiStartTaskComponent.start();
|
let createTaskButton = <HTMLElement> element.querySelector('#button-start');
|
||||||
jasmine.Ajax.requests.mostRecent().respondWith({
|
createTaskButton.click();
|
||||||
'status': 200,
|
|
||||||
contentType: 'json',
|
|
||||||
responseText:
|
|
||||||
{
|
|
||||||
id: '91',
|
|
||||||
name: 'fakeName',
|
|
||||||
description: 'fakeDescription',
|
|
||||||
formKey: '4',
|
|
||||||
assignee: {id: 1001, firstName: 'fakeName', email: 'fake@app.activiti.com'},
|
|
||||||
dueDate: null,
|
|
||||||
endDate: null,
|
|
||||||
duration: null,
|
|
||||||
priority: 50,
|
|
||||||
parentTaskId: null,
|
|
||||||
parentTaskName: null
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should send on success event when only name is given', async(() => {
|
it('should send on success event when only name is given', async(() => {
|
||||||
@ -181,36 +161,108 @@ describe('StartTaskComponent', () => {
|
|||||||
});
|
});
|
||||||
activitiStartTaskComponent.appId = 'fakeAppId';
|
activitiStartTaskComponent.appId = 'fakeAppId';
|
||||||
activitiStartTaskComponent.startTaskmodel.name = 'fakeName';
|
activitiStartTaskComponent.startTaskmodel.name = 'fakeName';
|
||||||
activitiStartTaskComponent.startTaskmodel = new StartTaskModel(startTaskMock);
|
let createTaskButton = <HTMLElement> element.querySelector('#button-start');
|
||||||
activitiStartTaskComponent.start();
|
createTaskButton.click();
|
||||||
jasmine.Ajax.requests.mostRecent().respondWith({
|
|
||||||
'status': 200,
|
|
||||||
contentType: 'json',
|
|
||||||
responseText: {}
|
|
||||||
});
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should attach a task when a form id selected', () => {
|
|
||||||
activitiStartTaskComponent.success.subscribe((res) => {
|
|
||||||
expect(res).toBeDefined();
|
|
||||||
expect(res.formKey).toBe('4');
|
|
||||||
});
|
|
||||||
activitiStartTaskComponent.appId = 'fakeAppId';
|
|
||||||
activitiStartTaskComponent.startTaskmodel = new StartTaskModel(startTaskMock);
|
|
||||||
activitiStartTaskComponent.start();
|
|
||||||
expect(getcreateNewTaskSpy).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not emit success event when data not present', async(() => {
|
it('should not emit success event when data not present', async(() => {
|
||||||
let successSpy: jasmine.Spy = spyOn(activitiStartTaskComponent.success, 'emit');
|
let successSpy: jasmine.Spy = spyOn(activitiStartTaskComponent.success, 'emit');
|
||||||
activitiStartTaskComponent.startTaskmodel = new StartTaskModel(null);
|
activitiStartTaskComponent.startTaskmodel = new StartTaskModel(null);
|
||||||
activitiStartTaskComponent.start();
|
let createTaskButton = <HTMLElement> element.querySelector('#button-start');
|
||||||
|
createTaskButton.click();
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
expect(getcreateNewTaskSpy).not.toHaveBeenCalled();
|
expect(createNewTaskSpy).not.toHaveBeenCalled();
|
||||||
expect(successSpy).not.toHaveBeenCalled();
|
expect(successSpy).not.toHaveBeenCalled();
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('assign form', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
attachFormSpy = spyOn(service, 'attachFormToATask').and.returnValue(Observable.of(
|
||||||
|
{
|
||||||
|
id: 91,
|
||||||
|
name: 'fakeName',
|
||||||
|
formKey: 1204,
|
||||||
|
assignee: null
|
||||||
|
}
|
||||||
|
));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should attach form to the task when a form is selected', () => {
|
||||||
|
activitiStartTaskComponent.success.subscribe((res) => {
|
||||||
|
expect(res).toBeDefined();
|
||||||
|
expect(res.id).toBe(91);
|
||||||
|
expect(res.name).toBe('fakeName');
|
||||||
|
expect(res.formKey).toBe(1204);
|
||||||
|
expect(res.assignee).toBe(null);
|
||||||
|
});
|
||||||
|
activitiStartTaskComponent.appId = 'fakeAppId';
|
||||||
|
activitiStartTaskComponent.formKey = 1204;
|
||||||
|
activitiStartTaskComponent.startTaskmodel = new StartTaskModel(startTaskMock);
|
||||||
|
let createTaskButton = <HTMLElement> element.querySelector('#button-start');
|
||||||
|
createTaskButton.click();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not attach form to the task when a no form is selected', () => {
|
||||||
|
activitiStartTaskComponent.success.subscribe((res) => {
|
||||||
|
expect(res).toBeDefined();
|
||||||
|
expect(res.id).toBe(91);
|
||||||
|
expect(res.name).toBe('fakeName');
|
||||||
|
expect(res.formKey).toBe(null);
|
||||||
|
});
|
||||||
|
activitiStartTaskComponent.appId = 'fakeAppId';
|
||||||
|
activitiStartTaskComponent.formKey = null;
|
||||||
|
activitiStartTaskComponent.startTaskmodel = new StartTaskModel(startTaskMock);
|
||||||
|
let createTaskButton = <HTMLElement> element.querySelector('#button-start');
|
||||||
|
createTaskButton.click();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('assign task', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
assignUserSpy = spyOn(service, 'assignTask').and.returnValue(Observable.of(
|
||||||
|
{
|
||||||
|
id: 91,
|
||||||
|
name: 'fakeName',
|
||||||
|
formKey: 1204,
|
||||||
|
assignee: testUser
|
||||||
|
}
|
||||||
|
));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should assign task when an assignee is selected', () => {
|
||||||
|
activitiStartTaskComponent.success.subscribe((res) => {
|
||||||
|
expect(res).toBeDefined();
|
||||||
|
expect(res.id).toBe(91);
|
||||||
|
expect(res.name).toBe('fakeName');
|
||||||
|
expect(res.formKey).toBe(1204);
|
||||||
|
expect(res.assignee).toBe(testUser);
|
||||||
|
});
|
||||||
|
activitiStartTaskComponent.appId = 'fakeAppId';
|
||||||
|
activitiStartTaskComponent.formKey = 1204;
|
||||||
|
activitiStartTaskComponent.assignee = new User(testUser);
|
||||||
|
activitiStartTaskComponent.startTaskmodel = new StartTaskModel(startTaskMock);
|
||||||
|
let createTaskButton = <HTMLElement> element.querySelector('#button-start');
|
||||||
|
createTaskButton.click();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not assign task when no assignee is selected', () => {
|
||||||
|
activitiStartTaskComponent.success.subscribe((res) => {
|
||||||
|
expect(res).toBeDefined();
|
||||||
|
expect(res.id).toBe(91);
|
||||||
|
expect(res.name).toBe('fakeName');
|
||||||
|
expect(res.formKey).toBe(1204);
|
||||||
|
expect(res.assignee).toBe(null);
|
||||||
|
});
|
||||||
|
activitiStartTaskComponent.appId = 'fakeAppId';
|
||||||
|
activitiStartTaskComponent.formKey = 1204;
|
||||||
|
activitiStartTaskComponent.assignee = null;
|
||||||
|
activitiStartTaskComponent.startTaskmodel = new StartTaskModel(startTaskMock);
|
||||||
|
let createTaskButton = <HTMLElement> element.querySelector('#button-start');
|
||||||
|
createTaskButton.click();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should not attach a task when a form id is not slected', () => {
|
it('should not attach a task when a form id is not slected', () => {
|
||||||
let attachFormToATask = spyOn(service, 'attachFormToATask').and.returnValue(Observable.of());
|
let attachFormToATask = spyOn(service, 'attachFormToATask').and.returnValue(Observable.of());
|
||||||
spyOn(service, 'createNewTask').and.callFake(
|
spyOn(service, 'createNewTask').and.callFake(
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
||||||
import { AlfrescoTranslationService, LogService } from 'ng2-alfresco-core';
|
import { AlfrescoTranslationService, LogService } from 'ng2-alfresco-core';
|
||||||
|
import { Observable } from 'rxjs/Rx';
|
||||||
import { Form } from '../models/form.model';
|
import { Form } from '../models/form.model';
|
||||||
import { StartTaskModel } from '../models/start-task.model';
|
import { StartTaskModel } from '../models/start-task.model';
|
||||||
import { TaskDetailsModel } from '../models/task-details.model';
|
import { TaskDetailsModel } from '../models/task-details.model';
|
||||||
@ -49,6 +50,12 @@ export class StartTaskComponent implements OnInit {
|
|||||||
|
|
||||||
forms: Form[];
|
forms: Form[];
|
||||||
|
|
||||||
|
assignee: any;
|
||||||
|
|
||||||
|
formKey: number;
|
||||||
|
|
||||||
|
taskId: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
* @param auth
|
* @param auth
|
||||||
@ -70,34 +77,48 @@ export class StartTaskComponent implements OnInit {
|
|||||||
this.getUsers();
|
this.getUsers();
|
||||||
}
|
}
|
||||||
|
|
||||||
public start() {
|
public start(): void {
|
||||||
if (this.startTaskmodel.name) {
|
if (this.startTaskmodel.name) {
|
||||||
this.startTaskmodel.category = this.appId;
|
this.startTaskmodel.category = this.appId;
|
||||||
this.taskService.createNewTask(new TaskDetailsModel(this.startTaskmodel)).subscribe(
|
this.taskService.createNewTask(new TaskDetailsModel(this.startTaskmodel))
|
||||||
|
.switchMap((createRes: any) =>
|
||||||
|
this.attachForm(createRes.id, this.formKey).defaultIfEmpty(createRes)
|
||||||
|
.switchMap((attachRes: any) =>
|
||||||
|
this.assignTask(createRes.id, this.assignee).defaultIfEmpty(attachRes ? attachRes : createRes)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.subscribe(
|
||||||
(res: any) => {
|
(res: any) => {
|
||||||
this.success.emit(res);
|
this.success.emit(res);
|
||||||
this.attachForm(res.id);
|
|
||||||
this.resetForm();
|
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
this.error.emit(err);
|
this.error.emit(err);
|
||||||
this.logService.error('An error occurred while trying to add the task');
|
this.logService.error('An error occurred while creating new task');
|
||||||
}
|
});
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private attachForm(taskId: string) {
|
private attachForm(taskId: string, formKey: number): Observable<any> {
|
||||||
if (this.startTaskmodel.formKey && taskId) {
|
let response = Observable.of();
|
||||||
this.taskService.attachFormToATask(taskId, Number(this.startTaskmodel.formKey));
|
if (taskId && formKey) {
|
||||||
|
response = this.taskService.attachFormToATask(taskId, formKey);
|
||||||
}
|
}
|
||||||
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
public onCancel() {
|
private assignTask(taskId: string, assignee: any): Observable<any> {
|
||||||
|
let response = Observable.of();
|
||||||
|
if (taskId && assignee) {
|
||||||
|
response = this.taskService.assignTask(taskId, assignee);
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public onCancel(): void {
|
||||||
this.cancel.emit();
|
this.cancel.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
private loadFormsTask() {
|
private loadFormsTask(): void {
|
||||||
this.taskService.getFormList().subscribe((res: Form[]) => {
|
this.taskService.getFormList().subscribe((res: Form[]) => {
|
||||||
this.forms = res;
|
this.forms = res;
|
||||||
},
|
},
|
||||||
@ -107,11 +128,7 @@ export class StartTaskComponent implements OnInit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private resetForm() {
|
private getUsers(): void {
|
||||||
this.startTaskmodel = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private getUsers() {
|
|
||||||
this.peopleService.getWorkflowUsers().subscribe((users) => {
|
this.peopleService.getWorkflowUsers().subscribe((users) => {
|
||||||
this.people = users;
|
this.people = users;
|
||||||
}, (err) => {
|
}, (err) => {
|
||||||
@ -120,15 +137,15 @@ export class StartTaskComponent implements OnInit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
isUserNameEmpty(user: any) {
|
public isUserNameEmpty(user: any): boolean {
|
||||||
return !user || (this.isEmpty(user.firstName) && this.isEmpty(user.lastName));
|
return !user || (this.isEmpty(user.firstName) && this.isEmpty(user.lastName));
|
||||||
}
|
}
|
||||||
|
|
||||||
private isEmpty(data: string) {
|
private isEmpty(data: string): boolean {
|
||||||
return data === undefined || data === null || data.trim().length === 0;
|
return data === undefined || data === null || data.trim().length === 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
getDisplayUser(firstName: string, lastName: string, delimiter: string = '-'): string {
|
public getDisplayUser(firstName: string, lastName: string, delimiter: string = '-'): string {
|
||||||
firstName = (firstName !== null ? firstName : '');
|
firstName = (firstName !== null ? firstName : '');
|
||||||
lastName = (lastName !== null ? lastName : '');
|
lastName = (lastName !== null ? lastName : '');
|
||||||
return firstName + delimiter + lastName;
|
return firstName + delimiter + lastName;
|
||||||
|
@ -33,12 +33,14 @@ import {
|
|||||||
fakeTaskListDifferentProcessDefinitionKey,
|
fakeTaskListDifferentProcessDefinitionKey,
|
||||||
fakeTasksChecklist,
|
fakeTasksChecklist,
|
||||||
fakeTasksComment,
|
fakeTasksComment,
|
||||||
fakeUser,
|
fakeUser1,
|
||||||
|
fakeUser2,
|
||||||
secondFakeTaskList
|
secondFakeTaskList
|
||||||
} from '../assets/tasklist-service.mock';
|
} from '../assets/tasklist-service.mock';
|
||||||
import { Comment } from '../models/comment.model';
|
import { Comment } from '../models/comment.model';
|
||||||
import { FilterRepresentationModel, TaskQueryRequestRepresentationModel } from '../models/filter.model';
|
import { FilterRepresentationModel, TaskQueryRequestRepresentationModel } from '../models/filter.model';
|
||||||
import { TaskDetailsModel } from '../models/task-details.model';
|
import { TaskDetailsModel } from '../models/task-details.model';
|
||||||
|
import { User } from '../models/user.model';
|
||||||
import { TaskListService } from './tasklist.service';
|
import { TaskListService } from './tasklist.service';
|
||||||
|
|
||||||
declare let jasmine: any;
|
declare let jasmine: any;
|
||||||
@ -288,7 +290,7 @@ describe('Activiti TaskList Service', () => {
|
|||||||
name: 'FakeNameTask',
|
name: 'FakeNameTask',
|
||||||
description: null,
|
description: null,
|
||||||
category: null,
|
category: null,
|
||||||
assignee: fakeUser,
|
assignee: fakeUser1,
|
||||||
created: ''
|
created: ''
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -307,7 +309,7 @@ describe('Activiti TaskList Service', () => {
|
|||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
responseText: JSON.stringify({
|
responseText: JSON.stringify({
|
||||||
id: '777', name: 'FakeNameTask', description: null, category: null,
|
id: '777', name: 'FakeNameTask', description: null, category: null,
|
||||||
assignee: fakeUser,
|
assignee: fakeUser1,
|
||||||
created: '2016-07-15T11:19:17.440+0000'
|
created: '2016-07-15T11:19:17.440+0000'
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
@ -345,7 +347,7 @@ describe('Activiti TaskList Service', () => {
|
|||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
responseText: JSON.stringify({
|
responseText: JSON.stringify({
|
||||||
id: '111', message: 'fake-comment-message',
|
id: '111', message: 'fake-comment-message',
|
||||||
createdBy: fakeUser,
|
createdBy: fakeUser1,
|
||||||
created: '2016-07-15T11:19:17.440+0000'
|
created: '2016-07-15T11:19:17.440+0000'
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
@ -540,7 +542,40 @@ describe('Activiti TaskList Service', () => {
|
|||||||
name: 'FakeNameTask',
|
name: 'FakeNameTask',
|
||||||
description: 'FakeDescription',
|
description: 'FakeDescription',
|
||||||
category: '3',
|
category: '3',
|
||||||
assignee: fakeUser,
|
assignee: fakeUser1,
|
||||||
|
created: '2016-07-15T11:19:17.440+0000'
|
||||||
|
})
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should assign task to a user', (done) => {
|
||||||
|
let testTaskId = '8888';
|
||||||
|
service.assignTask(testTaskId, fakeUser2).subscribe(
|
||||||
|
(res: TaskDetailsModel) => {
|
||||||
|
expect(res).toBeDefined();
|
||||||
|
expect(res.id).toEqual(testTaskId);
|
||||||
|
expect(res.name).toEqual('FakeNameTask');
|
||||||
|
expect(res.description).toEqual('FakeDescription');
|
||||||
|
expect(res.category).toEqual('3');
|
||||||
|
expect(res.created).not.toEqual('');
|
||||||
|
expect(res.adhocTaskCanBeReassigned).toBe(true);
|
||||||
|
expect(res.assignee).toEqual(new User(fakeUser2));
|
||||||
|
expect(res.involvedPeople).toEqual([fakeUser1]);
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
jasmine.Ajax.requests.mostRecent().respondWith({
|
||||||
|
'status': 200,
|
||||||
|
contentType: 'application/json',
|
||||||
|
responseText: JSON.stringify({
|
||||||
|
id: testTaskId,
|
||||||
|
name: 'FakeNameTask',
|
||||||
|
description: 'FakeDescription',
|
||||||
|
adhocTaskCanBeReassigned: true,
|
||||||
|
category: '3',
|
||||||
|
assignee: fakeUser2,
|
||||||
|
involvedPeople: [fakeUser1],
|
||||||
created: '2016-07-15T11:19:17.440+0000'
|
created: '2016-07-15T11:19:17.440+0000'
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
@ -366,6 +366,20 @@ export class TaskListService {
|
|||||||
}).catch(err => this.handleError(err));
|
}).catch(err => this.handleError(err));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assign task to user/group
|
||||||
|
* @param taskId - string
|
||||||
|
* @param requestNode - any
|
||||||
|
* @returns {TaskDetailsModel}
|
||||||
|
*/
|
||||||
|
assignTask(taskId: string, requestNode: any): Observable<TaskDetailsModel> {
|
||||||
|
return Observable.fromPromise(this.callApiAssignTask(taskId, requestNode))
|
||||||
|
.map(res => res)
|
||||||
|
.map((response: TaskDetailsModel) => {
|
||||||
|
return new TaskDetailsModel(response);
|
||||||
|
}).catch(err => this.handleError(err));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Claim a task
|
* Claim a task
|
||||||
* @param id - taskId
|
* @param id - taskId
|
||||||
@ -496,4 +510,8 @@ export class TaskListService {
|
|||||||
'filter': { 'sort': 'created-desc', 'name': '', 'state': 'completed', 'assignment': 'involved' }
|
'filter': { 'sort': 'created-desc', 'name': '', 'state': 'completed', 'assignment': 'involved' }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private callApiAssignTask(taskId: string, requestNode: any) {
|
||||||
|
return this.apiService.getInstance().activiti.taskApi.assignTask(taskId, requestNode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user