From 312d8432df0008737efc55328c56adf97ca231d8 Mon Sep 17 00:00:00 2001 From: Silviu Popa Date: Wed, 10 Apr 2019 03:30:57 +0300 Subject: [PATCH] [ADF-4357] TaskListCloud - change complete task condition (#4554) * [ADF-4357] TaskListCloud - change complete task condition * [ADF-4357] - PR changes * [ADF-4357] - add unit test and change owner user * [ADF-4357] - lint * [ADF-4357] - change complete task condition --- .../task/services/task-cloud.service.spec.ts | 24 +++++++- .../lib/task/services/task-cloud.service.ts | 2 +- .../task/start-task/mock/user-cloud.mock.ts | 2 +- .../models/task-details-cloud.model.ts | 4 ++ .../task-header-cloud.component.spec.ts | 8 +-- .../mocks/task-details-cloud.mock.ts | 58 ++++++++++++++++++- 6 files changed, 87 insertions(+), 11 deletions(-) diff --git a/lib/process-services-cloud/src/lib/task/services/task-cloud.service.spec.ts b/lib/process-services-cloud/src/lib/task/services/task-cloud.service.spec.ts index ae1d8f9aef..911646e164 100644 --- a/lib/process-services-cloud/src/lib/task/services/task-cloud.service.spec.ts +++ b/lib/process-services-cloud/src/lib/task/services/task-cloud.service.spec.ts @@ -20,7 +20,7 @@ import { setupTestBed, IdentityUserService } from '@alfresco/adf-core'; import { AlfrescoApiServiceMock, LogService, AppConfigService, CoreModule } from '@alfresco/adf-core'; import { TaskCloudService } from './task-cloud.service'; import { taskCompleteCloudMock } from '../task-header/mocks/fake-complete-task.mock'; -import { taskDetailsCloudMock } from '../task-header/mocks/task-details-cloud.mock'; +import { assignedTaskDetailsCloudMock, createdTaskDetailsCloudMock, emptyOwnerTaskDetailsCloudMock } from '../task-header/mocks/task-details-cloud.mock'; import { fakeTaskDetailsCloud } from '../task-header/mocks/fake-task-details-response.mock'; import { cloudMockUser } from '../start-task/mock/user-cloud.mock'; @@ -104,10 +104,30 @@ describe('Task Cloud Service', () => { }); it('should canCompleteTask', () => { - const canCompleteTaskResult = service.canCompleteTask(taskDetailsCloudMock); + const canCompleteTaskResult = service.canCompleteTask(assignedTaskDetailsCloudMock); expect(canCompleteTaskResult).toBeTruthy(); }); + it('should not complete with wrong asignee and owner different from asigned user', () => { + const canCompleteTaskResult = service.canCompleteTask(createdTaskDetailsCloudMock); + expect(canCompleteTaskResult).toEqual(false); + }); + + it('should complete task with owner as null', async(() => { + const appName = 'simple-app'; + const taskId = '68d54a8f'; + const canCompleteTaskResult = service.canCompleteTask(emptyOwnerTaskDetailsCloudMock); + spyOn(alfrescoApiMock, 'getInstance').and.callFake(returnFakeTaskCompleteResults); + + service.completeTask(appName, taskId).subscribe((res: any) => { + expect(canCompleteTaskResult).toEqual(true); + expect(res).toBeDefined(); + expect(res).not.toBeNull(); + expect(res.entry.appName).toBe('simple-app'); + expect(res.entry.id).toBe('68d54a8f'); + }); + })); + it('should return the task details when claiming a task', (done) => { const appName = 'taskp-app'; const assignee = 'user12'; diff --git a/lib/process-services-cloud/src/lib/task/services/task-cloud.service.ts b/lib/process-services-cloud/src/lib/task/services/task-cloud.service.ts index 78ca221e86..fe207c46ab 100644 --- a/lib/process-services-cloud/src/lib/task/services/task-cloud.service.ts +++ b/lib/process-services-cloud/src/lib/task/services/task-cloud.service.ts @@ -71,7 +71,7 @@ export class TaskCloudService { */ canCompleteTask(taskDetails: TaskDetailsCloudModel): boolean { const currentUser = this.identityUserService.getCurrentUserInfo().username; - return taskDetails.assignee && taskDetails.owner === currentUser && !taskDetails.isCompleted(); + return taskDetails.assignee && taskDetails.assignee === currentUser && taskDetails.isAssigned(); } /** diff --git a/lib/process-services-cloud/src/lib/task/start-task/mock/user-cloud.mock.ts b/lib/process-services-cloud/src/lib/task/start-task/mock/user-cloud.mock.ts index 1bf9362984..b6d4148869 100644 --- a/lib/process-services-cloud/src/lib/task/start-task/mock/user-cloud.mock.ts +++ b/lib/process-services-cloud/src/lib/task/start-task/mock/user-cloud.mock.ts @@ -22,7 +22,7 @@ export const mockUsers = [ ]; export const cloudMockUser = { - id: 'fake-id-1', username: 'superadminuser', firstName: 'first-name-1', lastName: 'last-name-1', email: 'abc@xyz.com' + id: 'fake-id-1', username: 'AssignedTaskUser', firstName: 'first-name-1', lastName: 'last-name-1', email: 'abc@xyz.com' }; export const mockRoles = [ diff --git a/lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts b/lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts index 091ed1ca92..06747c4b0c 100644 --- a/lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts +++ b/lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts @@ -78,6 +78,10 @@ export class TaskDetailsCloudModel { return this.status && this.status === TaskStatusEnum.COMPLETED; } + isAssigned(): boolean { + return this.status && this.status === TaskStatusEnum.ASSIGNED; + } + canClaimTask(): boolean { return this.status === TaskStatusEnum.CREATED; } diff --git a/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.spec.ts index c50bc2dae9..7c592355e2 100644 --- a/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.spec.ts @@ -18,7 +18,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { setupTestBed, AppConfigService } from '@alfresco/adf-core'; import { TaskHeaderCloudComponent } from './task-header-cloud.component'; -import { taskDetailsCloudMock } from '../mocks/task-details-cloud.mock'; +import { assignedTaskDetailsCloudMock } from '../mocks/task-details-cloud.mock'; import { TaskHeaderCloudModule } from '../task-header-cloud.module'; import { By } from '@angular/platform-browser'; import { of } from 'rxjs'; @@ -44,10 +44,10 @@ describe('TaskHeaderCloudComponent', () => { fixture = TestBed.createComponent(TaskHeaderCloudComponent); component = fixture.componentInstance; component.appName = 'myApp'; - component.taskId = taskDetailsCloudMock.id; + component.taskId = assignedTaskDetailsCloudMock.id; service = TestBed.get(TaskCloudService); appConfigService = TestBed.get(AppConfigService); - spyOn(service, 'getTaskById').and.returnValue(of(taskDetailsCloudMock)); + spyOn(service, 'getTaskById').and.returnValue(of(assignedTaskDetailsCloudMock)); }); it('should render empty component if no task details provided', async(() => { @@ -63,7 +63,7 @@ describe('TaskHeaderCloudComponent', () => { fixture.whenStable().then(() => { const formNameEl = fixture.debugElement.query(By.css('[data-automation-id="card-textitem-value-assignee"] span')); - expect(formNameEl.nativeElement.innerText).toBe('Wilbur Adams'); + expect(formNameEl.nativeElement.innerText).toBe('AssignedTaskUser'); }); })); diff --git a/lib/process-services-cloud/src/lib/task/task-header/mocks/task-details-cloud.mock.ts b/lib/process-services-cloud/src/lib/task/task-header/mocks/task-details-cloud.mock.ts index e417613cfd..9037a30759 100644 --- a/lib/process-services-cloud/src/lib/task/task-header/mocks/task-details-cloud.mock.ts +++ b/lib/process-services-cloud/src/lib/task/task-header/mocks/task-details-cloud.mock.ts @@ -17,12 +17,12 @@ import { TaskDetailsCloudModel } from '../../start-task/models/task-details-cloud.model'; -export const taskDetailsCloudMock = new TaskDetailsCloudModel( +export const assignedTaskDetailsCloudMock = new TaskDetailsCloudModel( { 'appName': 'task-app', 'appVersion': '', 'id': '68d54a8f-01f3-11e9-8e36-0a58646002ad', - 'assignee': 'Wilbur Adams', + 'assignee': 'AssignedTaskUser', 'name': 'This is a new task ', 'description': 'This is the description ', 'createdDate': 1545048055900, @@ -33,7 +33,59 @@ export const taskDetailsCloudMock = new TaskDetailsCloudModel( 'processDefinitionId': null, 'processInstanceId': null, 'status': 'ASSIGNED', - 'owner': 'superadminuser', + 'owner': 'ownerUser', + 'parentTaskId': null, + 'formKey': null, + 'lastModified': 1545048055900, + 'lastModifiedTo': null, + 'lastModifiedFrom': null, + 'standAlone': true + } +); + +export const createdTaskDetailsCloudMock = new TaskDetailsCloudModel( + { + 'appName': 'task-app', + 'appVersion': '', + 'id': '68d54a8f-01f3-11e9-8e36-0a58646002ad', + 'assignee': 'CreatedTaskUser', + 'name': 'This is a new task ', + 'description': 'This is the description ', + 'createdDate': 1545048055900, + 'dueDate': 1545091200000, + 'claimedDate': null, + 'priority': 5, + 'category': null, + 'processDefinitionId': null, + 'processInstanceId': null, + 'status': 'CREATED', + 'owner': 'ownerUser', + 'parentTaskId': null, + 'formKey': null, + 'lastModified': 1545048055900, + 'lastModifiedTo': null, + 'lastModifiedFrom': null, + 'standAlone': true + } +); + +export const emptyOwnerTaskDetailsCloudMock = new TaskDetailsCloudModel( + { + 'appName': 'task-app', + 'appVersion': '', + 'id': '68d54a8f-01f3-11e9-8e36-0a58646002ad', + 'assignee': 'AssignedTaskUser', + 'name': 'This is a new task ', + 'description': 'This is the description ', + 'createdDate': 1545048055900, + 'dueDate': 1545091200000, + 'claimedDate': null, + 'priority': 5, + 'category': null, + 'processDefinitionId': null, + 'processInstanceId': null, + 'status': 'ASSIGNED', + 'owner': null, 'parentTaskId': null, 'formKey': null, 'lastModified': 1545048055900,