From c087b8859f77b79c572af6ef5dc0dc9dbe590e14 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 4 Mar 2020 16:22:05 +0100 Subject: [PATCH] 69305: Refactor workflow-actions to be resolved as HAL links --- src/app/core/tasks/models/task-object.model.ts | 16 ++++++++++------ .../claimed-task-actions.component.ts | 2 +- ...earch-result-detail-element.component.spec.ts | 7 ++++++- ...ask-search-result-detail-element.component.ts | 4 ++-- ...earch-result-detail-element.component.spec.ts | 6 +++++- ...ool-search-result-detail-element.component.ts | 4 ++-- ...-search-result-list-element.component.spec.ts | 6 +++++- ...aimed-search-result-list-element.component.ts | 4 ++-- ...-search-result-list-element.component.spec.ts | 6 +++++- .../pool-search-result-list-element.component.ts | 4 ++-- 10 files changed, 40 insertions(+), 19 deletions(-) diff --git a/src/app/core/tasks/models/task-object.model.ts b/src/app/core/tasks/models/task-object.model.ts index b56cec3a7e..86e0b46f36 100644 --- a/src/app/core/tasks/models/task-object.model.ts +++ b/src/app/core/tasks/models/task-object.model.ts @@ -13,6 +13,8 @@ import { HALLink } from '../../shared/hal-link.model'; import { WorkflowItem } from '../../submission/models/workflowitem.model'; import { TASK_OBJECT } from './task-object.resource-type'; import { WORKFLOWITEM } from '../../eperson/models/workflowitem.resource-type'; +import { WORKFLOW_ACTION } from './workflow-action-object.resource-type'; +import { WorkflowAction } from './workflow-action-object.model'; /** * An abstract model class for a TaskObject. @@ -34,12 +36,6 @@ export class TaskObject extends DSpaceObject implements CacheableObject { @autoserialize step: string; - /** - * The task action type - */ - @autoserialize - action: string; - /** * The {@link HALLink}s for this TaskObject */ @@ -49,6 +45,7 @@ export class TaskObject extends DSpaceObject implements CacheableObject { owner: HALLink; group: HALLink; workflowitem: HALLink; + action: HALLink; }; /** @@ -72,4 +69,11 @@ export class TaskObject extends DSpaceObject implements CacheableObject { @link(WORKFLOWITEM) workflowitem?: Observable> | WorkflowItem; + /** + * The task action type + * Will be undefined unless the group {@link HALLink} has been resolved. + */ + @link(WORKFLOW_ACTION, false, 'action') + action: Observable>; + } diff --git a/src/app/shared/mydspace-actions/claimed-task/claimed-task-actions.component.ts b/src/app/shared/mydspace-actions/claimed-task/claimed-task-actions.component.ts index e0020f6f31..c82154af09 100644 --- a/src/app/shared/mydspace-actions/claimed-task/claimed-task-actions.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/claimed-task-actions.component.ts @@ -96,7 +96,7 @@ export class ClaimedTaskActionsComponent extends MyDSpaceActionsComponent { it('should init workflowitem properly', (done) => { component.workflowitemRD$.subscribe((workflowitemRD) => { - expect(linkService.resolveLink).toHaveBeenCalled(); + // Make sure the necessary links are being resolved + expect(linkService.resolveLinks).toHaveBeenCalledWith( + component.dso, + jasmine.objectContaining({ name: 'workflowitem' }), + jasmine.objectContaining({ name: 'action' }) + ); expect(workflowitemRD.payload).toEqual(workflowitem); done(); }); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts index f6abb444d5..17792911f7 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts @@ -49,12 +49,12 @@ export class ClaimedTaskSearchResultDetailElementComponent extends SearchResultD */ ngOnInit() { super.ngOnInit(); - this.linkService.resolveLink(this.dso, followLink( + this.linkService.resolveLinks(this.dso, followLink( 'workflowitem', null, followLink('item', null, followLink('bundles')), followLink('submitter') - )); + ), followLink('action')); this.workflowitemRD$ = this.dso.workflowitem as Observable>; } diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts index f60cc44410..2e4f0ae608 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts @@ -86,7 +86,11 @@ describe('PoolSearchResultDetailElementComponent', () => { it('should init workflowitem properly', (done) => { component.workflowitemRD$.subscribe((workflowitemRD) => { - expect(linkService.resolveLink).toHaveBeenCalled(); + expect(linkService.resolveLinks).toHaveBeenCalledWith( + component.dso, + jasmine.objectContaining({ name: 'workflowitem' }), + jasmine.objectContaining({ name: 'action' }) + ); expect(workflowitemRD.payload).toEqual(workflowitem); done(); }); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts index afa4f57d78..aeaf314c6d 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts @@ -48,12 +48,12 @@ export class PoolSearchResultDetailElementComponent extends SearchResultDetailEl */ ngOnInit() { super.ngOnInit(); - this.linkService.resolveLink(this.dso, followLink( + this.linkService.resolveLinks(this.dso, followLink( 'workflowitem', null, followLink('item', null, followLink('bundles')), followLink('submitter') - )); + ), followLink('action')); this.workflowitemRD$ = this.dso.workflowitem as Observable>; } diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts index 03cc46725b..e2102fe9b7 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts @@ -86,7 +86,11 @@ describe('ClaimedSearchResultListElementComponent', () => { it('should init workflowitem properly', (done) => { component.workflowitemRD$.subscribe((workflowitemRD) => { - expect(linkService.resolveLink).toHaveBeenCalled(); + expect(linkService.resolveLinks).toHaveBeenCalledWith( + component.dso, + jasmine.objectContaining({ name: 'workflowitem' }), + jasmine.objectContaining({ name: 'action' }) + ); expect(workflowitemRD.payload).toEqual(workflowitem); done(); }); diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts index 1648a16d59..c36b45f2f1 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts @@ -55,12 +55,12 @@ export class ClaimedSearchResultListElementComponent extends SearchResultListEle */ ngOnInit() { super.ngOnInit(); - this.linkService.resolveLink(this.dso, followLink( + this.linkService.resolveLinks(this.dso, followLink( 'workflowitem', null, followLink('item'), followLink('submitter') - )); + ), followLink('action')); this.workflowitemRD$ = this.dso.workflowitem as Observable>; } } diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts index 39f567bb2e..adf534bb57 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts @@ -86,7 +86,11 @@ describe('PoolSearchResultListElementComponent', () => { it('should init workflowitem properly', (done) => { component.workflowitemRD$.subscribe((workflowitemRD) => { - expect(linkService.resolveLink).toHaveBeenCalled(); + expect(linkService.resolveLinks).toHaveBeenCalledWith( + component.dso, + jasmine.objectContaining({ name: 'workflowitem' }), + jasmine.objectContaining({ name: 'action' }) + ); expect(workflowitemRD.payload).toEqual(workflowitem); done(); }); diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts index f3368cf64c..b429ff823d 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts @@ -58,12 +58,12 @@ export class PoolSearchResultListElementComponent extends SearchResultListElemen */ ngOnInit() { super.ngOnInit(); - this.linkService.resolveLink(this.dso, followLink( + this.linkService.resolveLinks(this.dso, followLink( 'workflowitem', null, followLink('item'), followLink('submitter') - )); + ), followLink('action')); this.workflowitemRD$ = this.dso.workflowitem as Observable>; } }