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}}