From a03a150015e1c703f66897408c40fc80aae4f03a Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 6 Jan 2023 18:10:41 +0100 Subject: [PATCH] 98211: Added tests --- ...claimed-task-actions-abstract.component.ts | 16 +++ ...task-action-rating-reviewer.component.html | 4 +- ...k-action-rating-reviewer.component.spec.ts | 65 +++++++++- ...task-action-select-reviewer.component.html | 4 +- ...k-action-select-reviewer.component.spec.ts | 67 +++++++++- ...d-task-action-select-reviewer.component.ts | 9 +- .../testing/claimed-task-data-service.stub.ts | 10 ++ src/app/shared/testing/data-service.stub.ts | 12 ++ .../workflow-action-data-service.stub.ts | 15 +++ .../workflow-item-data-service.stub.ts | 5 + ...ced-workflow-action-page.component.spec.ts | 17 +++ ...w-action-rating-reviewer.component.spec.ts | 52 +++++++- ...w-action-select-reviewer.component.spec.ts | 58 ++++++++- ...advanced-workflow-action.component.spec.ts | 115 ++++++++++++++++-- ...-workflow-actions-loader.component.spec.ts | 9 ++ 15 files changed, 427 insertions(+), 31 deletions(-) create mode 100644 src/app/shared/testing/claimed-task-data-service.stub.ts create mode 100644 src/app/shared/testing/data-service.stub.ts create mode 100644 src/app/shared/testing/workflow-action-data-service.stub.ts create mode 100644 src/app/shared/testing/workflow-item-data-service.stub.ts diff --git a/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts b/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts index a99639bd17..8738f7745b 100644 --- a/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts @@ -13,4 +13,20 @@ import { ClaimedTaskActionsAbstractComponent } from './claimed-task-actions-abst template: '' }) export abstract class AdvancedClaimedTaskActionsAbstractComponent extends ClaimedTaskActionsAbstractComponent { + + workflowType: string; + + /** + * Route to the workflow's task page + */ + workflowTaskPageRoute: string; + + openAdvancedClaimedTaskTab(): void { + void this.router.navigate([this.workflowTaskPageRoute], { + queryParams: { + workflow: this.workflowType, + }, + }); + } + } diff --git a/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.html b/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.html index 84d3aa7cc7..856b585fb3 100644 --- a/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.html +++ b/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.html @@ -1,4 +1,4 @@ - diff --git a/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.spec.ts b/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.spec.ts index f99c0558c6..ed2fc42310 100644 --- a/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.spec.ts +++ b/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.spec.ts @@ -2,26 +2,85 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AdvancedClaimedTaskActionRatingReviewerComponent } from './advanced-claimed-task-action-rating-reviewer.component'; +import { By } from '@angular/platform-browser'; +import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; +import { ClaimedTaskDataServiceStub } from '../../../testing/claimed-task-data-service.stub'; +import { NotificationsServiceStub } from '../../../testing/notifications-service.stub'; +import { RouterStub } from '../../../testing/router.stub'; +import { SearchServiceStub } from '../../../testing/search-service.stub'; +import { ClaimedTaskDataService } from '../../../../core/tasks/claimed-task-data.service'; +import { NotificationsService } from '../../../notifications/notifications.service'; +import { RequestService } from '../../../../core/data/request.service'; +import { Router } from '@angular/router'; +import { SearchService } from '../../../../core/shared/search/search.service'; +import { Location } from '@angular/common'; +import { TranslateModule } from '@ngx-translate/core'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { + ADVANCED_WORKFLOW_ACTION_RATING_REVIEWER +} from '../../../../workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component'; -describe('AdvancedClaimedTaskActionsRatingReviewerComponent', () => { +const taskId = 'claimed-task-1'; + +describe('AdvancedClaimedTaskActionRatingReviewerComponent', () => { + const object = Object.assign(new ClaimedTask(), { id: taskId }); let component: AdvancedClaimedTaskActionRatingReviewerComponent; let fixture: ComponentFixture; + let claimedTaskDataService: ClaimedTaskDataServiceStub; + let notificationService: NotificationsServiceStub; + let router: RouterStub; + let searchService: SearchServiceStub; + beforeEach(async () => { + claimedTaskDataService = new ClaimedTaskDataServiceStub(); + notificationService = new NotificationsServiceStub(); + router = new RouterStub(); + searchService = new SearchServiceStub(); + await TestBed.configureTestingModule({ + imports: [ + TranslateModule.forRoot(), + ], declarations: [ AdvancedClaimedTaskActionRatingReviewerComponent, ], + providers: [ + { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, + { provide: NotificationsService, useValue: notificationService }, + { provide: RequestService, useValue: {} }, + { provide: Router, useValue: router }, + { provide: SearchService, useValue: searchService }, + Location, + ], + schemas: [NO_ERRORS_SCHEMA], }).compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(AdvancedClaimedTaskActionRatingReviewerComponent); component = fixture.componentInstance; + component.object = object; fixture.detectChanges(); }); - it('should create', () => { - expect(component).toBeTruthy(); + afterEach(() => { + fixture.debugElement.nativeElement.remove(); + }); + + it('should display select reviewer button', () => { + const btn = fixture.debugElement.query(By.css('.ratingReviewerAction')); + + expect(btn).not.toBeNull(); + }); + + it('should navigate to the advanced workflow page when clicked', () => { + fixture.debugElement.query(By.css('.ratingReviewerAction')).nativeElement.click(); + + expect(router.navigate).toHaveBeenCalledWith([`/workflowitems/${taskId}/advanced`], { + queryParams: { + workflow: ADVANCED_WORKFLOW_ACTION_RATING_REVIEWER, + }, + }); }); }); diff --git a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.html b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.html index 84d3aa7cc7..6a45e7e02c 100644 --- a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.html +++ b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.html @@ -1,4 +1,4 @@ - diff --git a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts index 24b8501f55..0c91898a97 100644 --- a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts +++ b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts @@ -2,26 +2,87 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AdvancedClaimedTaskActionSelectReviewerComponent } from './advanced-claimed-task-action-select-reviewer.component'; +import { Router } from '@angular/router'; +import { RouterStub } from '../../../testing/router.stub'; +import { NotificationsServiceStub } from '../../../testing/notifications-service.stub'; +import { NotificationsService } from '../../../notifications/notifications.service'; +import { TranslateModule } from '@ngx-translate/core'; +import { SearchServiceStub } from '../../../testing/search-service.stub'; +import { SearchService } from '../../../../core/shared/search/search.service'; +import { RequestService } from '../../../../core/data/request.service'; +import { ClaimedTaskDataService } from '../../../../core/tasks/claimed-task-data.service'; +import { ClaimedTaskDataServiceStub } from '../../../testing/claimed-task-data-service.stub'; +import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; +import { By } from '@angular/platform-browser'; +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { Location } from '@angular/common'; +import { + ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER +} from '../../../../workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component'; -describe('AdvancedClaimedTaskActionsSelectReviewerComponent', () => { +const taskId = 'claimed-task-1'; + +describe('AdvancedClaimedTaskActionSelectReviewerComponent', () => { + const object = Object.assign(new ClaimedTask(), { id: taskId }); let component: AdvancedClaimedTaskActionSelectReviewerComponent; let fixture: ComponentFixture; + let claimedTaskDataService: ClaimedTaskDataServiceStub; + let notificationService: NotificationsServiceStub; + let router: RouterStub; + let searchService: SearchServiceStub; + beforeEach(async () => { + claimedTaskDataService = new ClaimedTaskDataServiceStub(); + notificationService = new NotificationsServiceStub(); + router = new RouterStub(); + searchService = new SearchServiceStub(); + await TestBed.configureTestingModule({ + imports: [ + TranslateModule.forRoot(), + ], declarations: [ AdvancedClaimedTaskActionSelectReviewerComponent, + NgbTooltip, ], + providers: [ + { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, + { provide: NotificationsService, useValue: notificationService }, + { provide: RequestService, useValue: {} }, + { provide: Router, useValue: router }, + { provide: SearchService, useValue: searchService }, + Location, + ], + schemas: [NO_ERRORS_SCHEMA], }).compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(AdvancedClaimedTaskActionSelectReviewerComponent); component = fixture.componentInstance; + component.object = object; fixture.detectChanges(); }); - it('should create', () => { - expect(component).toBeTruthy(); + afterEach(() => { + fixture.debugElement.nativeElement.remove(); + }); + + it('should display select reviewer button', () => { + const btn = fixture.debugElement.query(By.css('.selectReviewerAction')); + + expect(btn).not.toBeNull(); + }); + + it('should navigate to the advanced workflow page when clicked', () => { + fixture.debugElement.query(By.css('.selectReviewerAction')).nativeElement.click(); + + expect(router.navigate).toHaveBeenCalledWith([`/workflowitems/${taskId}/advanced`], { + queryParams: { + workflow: ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER, + }, + }); }); }); diff --git a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts index fb45e911c5..7b2aa015af 100644 --- a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts @@ -10,8 +10,10 @@ import { SearchService } from '../../../../core/shared/search/search.service'; import { RequestService } from '../../../../core/data/request.service'; import { getAdvancedWorkflowRoute } from '../../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths'; import { - ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER, WORKFLOW_ADVANCED_TASK_OPTION_SELECT_REVIEWER + ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER, + WORKFLOW_ADVANCED_TASK_OPTION_SELECT_REVIEWER } from '../../../../workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component'; + @rendersWorkflowTaskOption(WORKFLOW_ADVANCED_TASK_OPTION_SELECT_REVIEWER) @Component({ selector: 'ds-advanced-claimed-task-action-select-reviewer', @@ -27,11 +29,6 @@ export class AdvancedClaimedTaskActionSelectReviewerComponent extends AdvancedCl workflowType = ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER; - /** - * Route to the workflow's task page - */ - workflowTaskPageRoute: string; - constructor( protected injector: Injector, protected router: Router, diff --git a/src/app/shared/testing/claimed-task-data-service.stub.ts b/src/app/shared/testing/claimed-task-data-service.stub.ts new file mode 100644 index 0000000000..ef04e3bf27 --- /dev/null +++ b/src/app/shared/testing/claimed-task-data-service.stub.ts @@ -0,0 +1,10 @@ +import { Observable, EMPTY } from 'rxjs'; +import { ProcessTaskResponse } from '../../core/tasks/models/process-task-response'; + +export class ClaimedTaskDataServiceStub { + + public submitTask(_scopeId: string, _body: any): Observable { + return EMPTY; + } + +} diff --git a/src/app/shared/testing/data-service.stub.ts b/src/app/shared/testing/data-service.stub.ts new file mode 100644 index 0000000000..0904775b5d --- /dev/null +++ b/src/app/shared/testing/data-service.stub.ts @@ -0,0 +1,12 @@ +import { FollowLinkConfig } from '../utils/follow-link-config.model'; +import { Observable, EMPTY } from 'rxjs'; +import { RemoteData } from '../../core/data/remote-data'; +import { CacheableObject } from '../../core/cache/object-cache.reducer'; + +export abstract class DataServiceStub { + + findById(_id: string, _useCachedVersionIfAvailable = true, _reRequestOnStale = true, ..._linksToFollow: FollowLinkConfig[]): Observable> { + return EMPTY; + } + +} diff --git a/src/app/shared/testing/workflow-action-data-service.stub.ts b/src/app/shared/testing/workflow-action-data-service.stub.ts new file mode 100644 index 0000000000..f05d995f49 --- /dev/null +++ b/src/app/shared/testing/workflow-action-data-service.stub.ts @@ -0,0 +1,15 @@ +import { FindListOptions } from '../../core/data/request.models'; +import { FollowLinkConfig } from '../utils/follow-link-config.model'; +import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model'; +import { Observable, EMPTY } from 'rxjs'; +import { RemoteData } from '../../core/data/remote-data'; +import { WorkflowItem } from '../../core/submission/models/workflowitem.model'; +import { DataServiceStub } from './data-service.stub'; + +export class WorkflowActionDataServiceStub extends DataServiceStub { + + public findByItem(_uuid: string, _useCachedVersionIfAvailable = false, _reRequestOnStale = true, _options: FindListOptions = {}, ..._linksToFollow: FollowLinkConfig[]): Observable> { + return EMPTY; + } + +} diff --git a/src/app/shared/testing/workflow-item-data-service.stub.ts b/src/app/shared/testing/workflow-item-data-service.stub.ts new file mode 100644 index 0000000000..20cde6bf9b --- /dev/null +++ b/src/app/shared/testing/workflow-item-data-service.stub.ts @@ -0,0 +1,5 @@ +import { DataServiceStub } from './data-service.stub'; +import { WorkflowItem } from '../../core/submission/models/workflowitem.model'; + +export class WorkflowItemDataServiceStub extends DataServiceStub { +} diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.spec.ts index ac713fa443..f2511f0490 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.spec.ts @@ -1,5 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AdvancedWorkflowActionPageComponent } from './advanced-workflow-action-page.component'; +import { ActivatedRoute, convertToParamMap } from '@angular/router'; +import { TranslateModule } from '@ngx-translate/core'; describe('AdvancedWorkflowActionPageComponent', () => { let component: AdvancedWorkflowActionPageComponent; @@ -7,9 +9,24 @@ describe('AdvancedWorkflowActionPageComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ + imports: [ + TranslateModule.forRoot(), + ], declarations: [ AdvancedWorkflowActionPageComponent, ], + providers: [ + { + provide: ActivatedRoute, + useValue: { + snapshot: { + queryParams: convertToParamMap({ + workflow: 'testaction', + }), + }, + }, + }, + ], }).compileComponents(); }); diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.spec.ts index c08e3c0a78..244e397303 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.spec.ts @@ -1,16 +1,60 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { AdvancedWorkflowActionRatingReviewerComponent } from './advanced-workflow-action-rating-reviewer.component'; +import { ActivatedRoute, convertToParamMap } from '@angular/router'; +import { of as observableOf } from 'rxjs'; +import { ClaimedTaskDataService } from '../../../core/tasks/claimed-task-data.service'; +import { NotificationsService } from '../../../shared/notifications/notifications.service'; +import { RouteService } from '../../../core/services/route.service'; +import { routeServiceStub } from '../../../shared/testing/route-service.stub'; +import { WorkflowActionDataService } from '../../../core/data/workflow-action-data.service'; +import { WorkflowItemDataService } from '../../../core/submission/workflowitem-data.service'; +import { ClaimedTaskDataServiceStub } from '../../../shared/testing/claimed-task-data-service.stub'; +import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub'; +import { WorkflowActionDataServiceStub } from '../../../shared/testing/workflow-action-data-service.stub'; +import { WorkflowItemDataServiceStub } from '../../../shared/testing/workflow-item-data-service.stub'; + +const workflowId = '1'; describe('AdvancedWorkflowActionRatingReviewerComponent', () => { let component: AdvancedWorkflowActionRatingReviewerComponent; let fixture: ComponentFixture; + let claimedTaskDataService: ClaimedTaskDataServiceStub; + let notificationService: NotificationsServiceStub; + let workflowActionDataService: WorkflowItemDataServiceStub; + let workflowItemDataService: WorkflowItemDataServiceStub; + beforeEach(async () => { + claimedTaskDataService = new ClaimedTaskDataServiceStub(); + notificationService = new NotificationsServiceStub(); + workflowActionDataService = new WorkflowActionDataServiceStub(); + workflowItemDataService = new WorkflowItemDataServiceStub(); + await TestBed.configureTestingModule({ - declarations: [ AdvancedWorkflowActionRatingReviewerComponent ] - }) - .compileComponents(); + declarations: [ + AdvancedWorkflowActionRatingReviewerComponent, + ], + providers: [ + { + provide: ActivatedRoute, + useValue: { + data: observableOf({ + id: workflowId, + }), + snapshot: { + queryParams: convertToParamMap({ + workflow: 'testaction', + }), + }, + }, + }, + { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, + { provide: NotificationsService, useValue: notificationService }, + { provide: RouteService, useValue: routeServiceStub }, + { provide: WorkflowActionDataService, useValue: workflowActionDataService }, + { provide: WorkflowItemDataService, useValue: workflowItemDataService }, + ], + }).compileComponents(); }); beforeEach(() => { diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts index b4f420774b..a3ede08b1d 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts @@ -1,16 +1,66 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { AdvancedWorkflowActionSelectReviewerComponent } from './advanced-workflow-action-select-reviewer.component'; +import { ActivatedRoute, convertToParamMap } from '@angular/router'; +import { WorkflowItemDataService } from '../../../core/submission/workflowitem-data.service'; +import { WorkflowItemDataServiceStub } from '../../../shared/testing/workflow-item-data-service.stub'; +import { RouterTestingModule } from '@angular/router/testing'; +import { WorkflowActionDataServiceStub } from '../../../shared/testing/workflow-action-data-service.stub'; +import { WorkflowActionDataService } from '../../../core/data/workflow-action-data.service'; +import { RouteService } from '../../../core/services/route.service'; +import { routeServiceStub } from '../../../shared/testing/route-service.stub'; +import { NotificationsService } from '../../../shared/notifications/notifications.service'; +import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub'; +import { TranslateModule } from '@ngx-translate/core'; +import { ClaimedTaskDataService } from '../../../core/tasks/claimed-task-data.service'; +import { ClaimedTaskDataServiceStub } from '../../../shared/testing/claimed-task-data-service.stub'; +import { of as observableOf } from 'rxjs'; + +const workflowId = '1'; describe('AdvancedWorkflowActionSelectReviewerComponent', () => { let component: AdvancedWorkflowActionSelectReviewerComponent; let fixture: ComponentFixture; + let claimedTaskDataService: ClaimedTaskDataServiceStub; + let notificationService: NotificationsServiceStub; + let workflowActionDataService: WorkflowItemDataServiceStub; + let workflowItemDataService: WorkflowItemDataServiceStub; + beforeEach(async () => { + claimedTaskDataService = new ClaimedTaskDataServiceStub(); + notificationService = new NotificationsServiceStub(); + workflowActionDataService = new WorkflowActionDataServiceStub(); + workflowItemDataService = new WorkflowItemDataServiceStub(); + await TestBed.configureTestingModule({ - declarations: [ AdvancedWorkflowActionSelectReviewerComponent ] - }) - .compileComponents(); + imports: [ + RouterTestingModule, + TranslateModule.forRoot(), + ], + declarations: [ + AdvancedWorkflowActionSelectReviewerComponent, + ], + providers: [ + { + provide: ActivatedRoute, + useValue: { + data: observableOf({ + id: workflowId, + }), + snapshot: { + queryParams: convertToParamMap({ + workflow: 'testaction', + }), + }, + }, + }, + { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, + { provide: NotificationsService, useValue: notificationService }, + { provide: RouteService, useValue: routeServiceStub }, + { provide: WorkflowActionDataService, useValue: workflowActionDataService }, + { provide: WorkflowItemDataService, useValue: workflowItemDataService }, + ], + }).compileComponents(); }); beforeEach(() => { diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts index 974dd4c257..b836a8704a 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts @@ -1,25 +1,126 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { AdvancedWorkflowActionComponent } from './advanced-workflow-action.component'; +import { Component } from '@angular/core'; +import { MockComponent } from 'ng-mocks'; +import { DSOSelectorComponent } from '../../../shared/dso-selector/dso-selector/dso-selector.component'; +import { ClaimedTaskDataService } from '../../../core/tasks/claimed-task-data.service'; +import { ClaimedTaskDataServiceStub } from '../../../shared/testing/claimed-task-data-service.stub'; +import { ActivatedRoute, convertToParamMap } from '@angular/router'; +import { of as observableOf } from 'rxjs'; +import { WorkflowItemDataService } from '../../../core/submission/workflowitem-data.service'; +import { RouterTestingModule } from '@angular/router/testing'; +import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub'; +import { WorkflowActionDataService } from '../../../core/data/workflow-action-data.service'; +import { NotificationsService } from '../../../shared/notifications/notifications.service'; +import { RouteService } from '../../../core/services/route.service'; +import { routeServiceStub } from '../../../shared/testing/route-service.stub'; +import { TranslateModule } from '@ngx-translate/core'; +import { WorkflowActionDataServiceStub } from '../../../shared/testing/workflow-action-data-service.stub'; +import { ProcessTaskResponse } from '../../../core/tasks/models/process-task-response'; +import { WorkflowItemDataServiceStub } from '../../../shared/testing/workflow-item-data-service.stub'; + +const workflowId = '1'; describe('AdvancedWorkflowActionComponent', () => { let component: AdvancedWorkflowActionComponent; let fixture: ComponentFixture; + let claimedTaskDataService: ClaimedTaskDataServiceStub; + let notificationService: NotificationsServiceStub; + let workflowActionDataService: WorkflowActionDataServiceStub; + let workflowItemDataService: WorkflowItemDataServiceStub; + beforeEach(async () => { + claimedTaskDataService = new ClaimedTaskDataServiceStub(); + notificationService = new NotificationsServiceStub(); + workflowActionDataService = new WorkflowActionDataServiceStub(); + workflowItemDataService = new WorkflowItemDataServiceStub(); + + await TestBed.configureTestingModule({ - declarations: [ AdvancedWorkflowActionComponent ] - }) - .compileComponents(); + imports: [ + TranslateModule.forRoot(), + RouterTestingModule, + ], + declarations: [ + TestComponent, + MockComponent(DSOSelectorComponent), + ], + providers: [ + { + provide: ActivatedRoute, + useValue: { + data: observableOf({ + id: workflowId, + }), + snapshot: { + queryParams: convertToParamMap({ + workflow: 'testaction', + }), + }, + }, + }, + { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, + { provide: NotificationsService, useValue: notificationService }, + { provide: RouteService, useValue: routeServiceStub }, + { provide: WorkflowActionDataService, useValue: workflowActionDataService }, + { provide: WorkflowItemDataService, useValue: workflowItemDataService }, + ], + }).compileComponents(); }); beforeEach(() => { - fixture = TestBed.createComponent(AdvancedWorkflowActionComponent); + fixture = TestBed.createComponent(TestComponent); component = fixture.componentInstance; + component.ngOnInit(); fixture.detectChanges(); }); - it('should create', () => { - expect(component).toBeTruthy(); + describe('sendRequest', () => { + it('should return true if the request succeeded', () => { + spyOn(claimedTaskDataService, 'submitTask').and.returnValue(observableOf(new ProcessTaskResponse(true, 200))); + spyOn(workflowActionDataService, 'findById'); + + const result = component.sendRequest(workflowId); + + expect(claimedTaskDataService.submitTask).toHaveBeenCalledWith('1', { + 'submit_test': true, + }); + result.subscribe((value: boolean) => { + expect(value).toBeTrue(); + }); + }); + + it('should return false if the request didn\'t succeeded', () => { + spyOn(claimedTaskDataService, 'submitTask').and.returnValue(observableOf(new ProcessTaskResponse(false, 404))); + spyOn(workflowActionDataService, 'findById'); + + const result = component.sendRequest(workflowId); + + expect(claimedTaskDataService.submitTask).toHaveBeenCalledWith('1', { + 'submit_test': true, + }); + result.subscribe((value: boolean) => { + expect(value).toBeFalse(); + }); + }); }); }); + +@Component({ + selector: 'ds-test-cmp', + template: '' +}) +class TestComponent extends AdvancedWorkflowActionComponent { + + createBody(): any { + return { + 'submit_test': true, + }; + } + + getType(): string { + return 'testaction'; + } + +} diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.spec.ts index 49cf92b171..321a6b954d 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.spec.ts @@ -1,15 +1,24 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AdvancedWorkflowActionsLoaderComponent } from './advanced-workflow-actions-loader.component'; +import { Router } from '@angular/router'; +import { RouterStub } from '../../../shared/testing/router.stub'; describe('AdvancedWorkflowActionsLoaderComponent', () => { let component: AdvancedWorkflowActionsLoaderComponent; let fixture: ComponentFixture; + let router: RouterStub; + beforeEach(async () => { + router = new RouterStub(); + await TestBed.configureTestingModule({ declarations: [ AdvancedWorkflowActionsLoaderComponent, ], + providers: [ + { provide: Router, useValue: router }, + ], }).compileComponents(); });