From 2637654dbabc760c6ad55c2a0d16d32703b23b53 Mon Sep 17 00:00:00 2001 From: Dharan <14145706+dhrn@users.noreply.github.com> Date: Tue, 1 Jun 2021 16:33:03 +0530 Subject: [PATCH] [AAE-5280] Better error handling for user task (#7070) * [AAE-5280] [ADF] Better error handling for user task * * fixed comments --- ...ommunity-task-details-cloud.component.html | 3 ++- .../community-task-details-cloud.component.ts | 9 +++++++++ .../task-details-cloud-demo.component.html | 3 ++- .../task-details-cloud-demo.component.ts | 9 +++++++++ .../claim-task-cloud.directive.spec.ts | 19 +++++++++++++++++-- .../complete-task.directive.spec.ts | 19 +++++++++++++++++-- .../unclaim-task-cloud.directive.spec.ts | 19 +++++++++++++++++-- .../unclaim-task-cloud.directive.ts | 10 ++-------- .../components/task-form-cloud.component.html | 7 ++++--- 9 files changed, 79 insertions(+), 19 deletions(-) diff --git a/demo-shell/src/app/components/cloud/community/community-task-details-cloud.component.html b/demo-shell/src/app/components/cloud/community/community-task-details-cloud.component.html index 5043f3cb5e9..c521a552292 100644 --- a/demo-shell/src/app/components/cloud/community/community-task-details-cloud.component.html +++ b/demo-shell/src/app/components/cloud/community/community-task-details-cloud.component.html @@ -9,7 +9,8 @@

Simple page to show the taskId: {{ (taskClaimed)="onClaimTask()" (taskCompleted)="onTaskCompleted()" (taskUnclaimed)="onUnclaimTask()" - (formSaved)="onFormSaved()"> + (formSaved)="onFormSaved()" + (error)="onError($event)"> Simple page to show the taskId: {{ (cancelClick)="goBack()" (taskCompleted)="onTaskCompleted()" (formContentClicked)="onFormContentClicked($event)" - (formSaved)="onFormSaved()"> + (formSaved)="onFormSaved()" + (error)="onError($event)"> { @Component({ selector: 'adf-cloud-claim-test-component', - template: '' + template: '' }) class TestComponent { @@ -37,6 +37,10 @@ describe('ClaimTaskCloudDirective', () => { @ViewChild(ClaimTaskCloudDirective, { static: false }) claimTaskDirective: ClaimTaskCloudDirective; + + onError(error: Error) { + return error; + } } let fixture: ComponentFixture; @@ -64,6 +68,17 @@ describe('ClaimTaskCloudDirective', () => { button.click(); expect(taskCloudService.claimTask).toHaveBeenCalled(); }); + + it('should emit error on api fail', async () => { + const error = { message: 'task key not found' }; + spyOn(taskCloudService, 'claimTask').and.returnValue(throwError(error)); + spyOn(fixture.componentInstance, 'onError').and.callThrough(); + const button = fixture.nativeElement.querySelector('button'); + button.click(); + await fixture.whenStable(); + expect(taskCloudService.claimTask).toHaveBeenCalled(); + expect(fixture.componentInstance.onError).toHaveBeenCalledWith(error); + }); }); describe('Claim Task Directive validation errors', () => { diff --git a/lib/process-services-cloud/src/lib/task/directives/complete-task.directive.spec.ts b/lib/process-services-cloud/src/lib/task/directives/complete-task.directive.spec.ts index f13d6d1d685..79bd37e4287 100644 --- a/lib/process-services-cloud/src/lib/task/directives/complete-task.directive.spec.ts +++ b/lib/process-services-cloud/src/lib/task/directives/complete-task.directive.spec.ts @@ -18,7 +18,7 @@ import { Component, ViewChild, ContentChildren } from '@angular/core'; import { CompleteTaskDirective } from './complete-task.directive'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { setupTestBed } from '@alfresco/adf-core'; -import { of } from 'rxjs'; +import { of, throwError } from 'rxjs'; import { taskCompleteCloudMock } from '../task-header/mocks/fake-complete-task.mock'; import { TaskCloudService } from '../services/task-cloud.service'; import { ProcessServiceCloudTestingModule } from '../../testing/process-service-cloud.testing.module'; @@ -28,7 +28,7 @@ describe('CompleteTaskDirective', () => { @Component({ selector: 'adf-cloud-test-component', - template: `` + template: `` }) class TestComponent { @@ -41,6 +41,10 @@ describe('CompleteTaskDirective', () => { onCompleteTask(event: any) { return event; } + + onError(error: Error) { + return error; + } } let fixture: ComponentFixture; @@ -68,6 +72,17 @@ describe('CompleteTaskDirective', () => { button.click(); expect(taskCloudService.completeTask).toHaveBeenCalled(); }); + + it('should emit error on api fail', async () => { + const error = { message: 'process key not found' }; + spyOn(taskCloudService, 'completeTask').and.returnValue(throwError(error)); + spyOn(fixture.componentInstance, 'onError').and.callThrough(); + const button = fixture.nativeElement.querySelector('button'); + button.click(); + await fixture.whenStable(); + expect(taskCloudService.completeTask).toHaveBeenCalled(); + expect(fixture.componentInstance.onError).toHaveBeenCalledWith(error); + }); }); describe('Complete Task Directive validation errors', () => { diff --git a/lib/process-services-cloud/src/lib/task/directives/unclaim-task-cloud.directive.spec.ts b/lib/process-services-cloud/src/lib/task/directives/unclaim-task-cloud.directive.spec.ts index fd504004970..20bc645d6e9 100644 --- a/lib/process-services-cloud/src/lib/task/directives/unclaim-task-cloud.directive.spec.ts +++ b/lib/process-services-cloud/src/lib/task/directives/unclaim-task-cloud.directive.spec.ts @@ -18,7 +18,7 @@ import { Component, ContentChildren, ViewChild } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { setupTestBed } from '@alfresco/adf-core'; import { TaskCloudService } from '../services/task-cloud.service'; -import { of } from 'rxjs'; +import { of, throwError } from 'rxjs'; import { UnClaimTaskCloudDirective } from './unclaim-task-cloud.directive'; import { taskClaimCloudMock } from '../task-header/mocks/fake-claim-task.mock'; import { ProcessServiceCloudTestingModule } from '../../testing/process-service-cloud.testing.module'; @@ -28,7 +28,7 @@ describe('UnClaimTaskCloudDirective', () => { @Component({ selector: 'adf-cloud-test-component', - template: '' + template: '' }) class TestComponent { @@ -37,6 +37,10 @@ describe('UnClaimTaskCloudDirective', () => { @ContentChildren(UnClaimTaskCloudDirective) unclaimTaskDirective: UnClaimTaskCloudDirective; + + onError(error: Error) { + return error; + } } let fixture: ComponentFixture; @@ -64,6 +68,17 @@ describe('UnClaimTaskCloudDirective', () => { button.click(); expect(taskCloudService.unclaimTask).toHaveBeenCalled(); }); + + it('should emit error on api fail', async () => { + const error = { message: 'task key not found' }; + spyOn(taskCloudService, 'unclaimTask').and.returnValue(throwError(error)); + spyOn(fixture.componentInstance, 'onError').and.callThrough(); + const button = fixture.nativeElement.querySelector('button'); + button.click(); + await fixture.whenStable(); + expect(taskCloudService.unclaimTask).toHaveBeenCalled(); + expect(fixture.componentInstance.onError).toHaveBeenCalledWith(error); + }); }); describe('UnClaim Task Directive validation errors', () => { diff --git a/lib/process-services-cloud/src/lib/task/directives/unclaim-task-cloud.directive.ts b/lib/process-services-cloud/src/lib/task/directives/unclaim-task-cloud.directive.ts index fdcb1ee55f1..0ce82ea6d91 100644 --- a/lib/process-services-cloud/src/lib/task/directives/unclaim-task-cloud.directive.ts +++ b/lib/process-services-cloud/src/lib/task/directives/unclaim-task-cloud.directive.ts @@ -72,16 +72,10 @@ export class UnClaimTaskCloudDirective implements OnInit { @HostListener('click') async onClick() { try { - await this.unclaimTask(); + await this.taskListService.unclaimTask(this.appName, this.taskId).toPromise(); + this.success.emit(this.taskId); } catch (error) { this.error.emit(error); } } - - private async unclaimTask() { - await this.taskListService.unclaimTask(this.appName, this.taskId).subscribe( - () => { - this.success.emit(this.taskId); - }); - } } diff --git a/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.html b/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.html index 9125860c298..db5c85496e7 100644 --- a/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.html +++ b/lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.html @@ -13,6 +13,7 @@ (formSaved)="onFormSaved($event)" (formCompleted)="onFormCompleted($event)" (formError)="onError($event)" + (error)="onError($event)" (formContentClicked)="onFormContentClicked($event)"> @@ -42,7 +43,7 @@

@@ -53,11 +54,11 @@

{{'ADF_CLOUD_TASK_FORM.EMPTY_FORM.BUTTONS.CANCEL' | translate}}