[TLC-674] Unit test fixes for comp, claimed/pooled tasks

This commit is contained in:
Kim Shepherd
2024-01-23 15:51:29 +13:00
parent 43620a44f2
commit d06d5b1b13
6 changed files with 32 additions and 27 deletions

View File

@@ -21,4 +21,7 @@ export class Duplicate {
*/ */
@autoserialize @autoserialize
metadata: MetadataMap; metadata: MetadataMap;
@autoserialize
type: string;
} }

View File

@@ -4,7 +4,8 @@
[showSubmitter]="showSubmitter" [showSubmitter]="showSubmitter"
[badgeContext]="badgeContext" [badgeContext]="badgeContext"
[workflowItem]="workflowitem$.value"></ds-themed-item-list-preview> [workflowItem]="workflowitem$.value"></ds-themed-item-list-preview>
<ng-container *ngVar="(duplicates$|async).length as duplicateCount"> <!-- Display duplicate alert, if feature enabled and duplicates detected -->
<ng-container *ngVar="(duplicates$|async)?.length as duplicateCount">
<div [ngClass]="'col-md-12'" *ngIf="duplicateCount > 0"> <div [ngClass]="'col-md-12'" *ngIf="duplicateCount > 0">
<div class="d-flex"> <div class="d-flex">
{{ duplicateCount }} {{ 'submission.workflow.tasks.duplicates' | translate }} {{ duplicateCount }} {{ 'submission.workflow.tasks.duplicates' | translate }}

View File

@@ -18,10 +18,11 @@ import { APP_CONFIG, AppConfig } from '../../../../../config/app-config.interfac
import { ObjectCacheService } from '../../../../core/cache/object-cache.service'; import { ObjectCacheService } from '../../../../core/cache/object-cache.service';
import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; import { getFirstCompletedRemoteData } from '../../../../core/shared/operators';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { mergeMap, tap } from 'rxjs/operators'; import {map, mergeMap, tap} from 'rxjs/operators';
import { isNotEmpty, hasValue } from '../../../empty.util'; import { isNotEmpty, hasValue } from '../../../empty.util';
import { Context } from '../../../../core/shared/context.model'; import { Context } from '../../../../core/shared/context.model';
import { Duplicate } from '../../duplicate-data/duplicate.model'; import { Duplicate } from '../../duplicate-data/duplicate.model';
import { PaginatedList } from "../../../../core/data/paginated-list.model";
@Component({ @Component({
selector: 'ds-claimed-search-result-list-element', selector: 'ds-claimed-search-result-list-element',
@@ -54,7 +55,7 @@ export class ClaimedSearchResultListElementComponent extends SearchResultListEle
/** /**
* The potential duplicates of this item * The potential duplicates of this item
*/ */
public duplicates$: Observable<Duplicate[]>; public duplicates$: Observable<Duplicate[]> = new Observable<Duplicate[]>();
/** /**
* Display thumbnails if required by configuration * Display thumbnails if required by configuration
@@ -96,6 +97,16 @@ export class ClaimedSearchResultListElementComponent extends SearchResultListEle
tap((itemRD: RemoteData<Item>) => { tap((itemRD: RemoteData<Item>) => {
if (isNotEmpty(itemRD) && itemRD.hasSucceeded) { if (isNotEmpty(itemRD) && itemRD.hasSucceeded) {
this.item$.next(itemRD.payload); this.item$.next(itemRD.payload);
this.duplicates$ = itemRD.payload.duplicates.pipe(
getFirstCompletedRemoteData(),
map((remoteData: RemoteData<PaginatedList<Duplicate>>) => {
if (remoteData.hasSucceeded) {
if (remoteData.payload.page) {
return remoteData.payload.page;
}
}
})
);
} }
}) })
).subscribe(); ).subscribe();

View File

@@ -4,7 +4,8 @@
[showSubmitter]="showSubmitter" [showSubmitter]="showSubmitter"
[badgeContext]="badgeContext" [badgeContext]="badgeContext"
[workflowItem]="workflowitem$.value"></ds-themed-item-list-preview> [workflowItem]="workflowitem$.value"></ds-themed-item-list-preview>
<ng-container *ngVar="(duplicates$|async).length as duplicateCount"> <!-- Display duplicate alert, if feature enabled and duplicates detected -->
<ng-container *ngVar="(duplicates$|async)?.length as duplicateCount">
<div [ngClass]="'col-md-12'" *ngIf="duplicateCount > 0"> <div [ngClass]="'col-md-12'" *ngIf="duplicateCount > 0">
<div class="d-flex"> <div class="d-flex">
{{ duplicateCount }} {{ 'submission.workflow.tasks.duplicates' | translate }} {{ duplicateCount }} {{ 'submission.workflow.tasks.duplicates' | translate }}

View File

@@ -60,7 +60,7 @@ export class PoolSearchResultListElementComponent extends SearchResultListElemen
/** /**
* The potential duplicates of this workflow item * The potential duplicates of this workflow item
*/ */
public duplicates$: Observable<Duplicate[]>; public duplicates$: Observable<Duplicate[]> = new Observable<Duplicate[]>();
/** /**
* The index of this list element * The index of this list element
@@ -107,11 +107,9 @@ export class PoolSearchResultListElementComponent extends SearchResultListElemen
tap((itemRD: RemoteData<Item>) => { tap((itemRD: RemoteData<Item>) => {
if (isNotEmpty(itemRD) && itemRD.hasSucceeded) { if (isNotEmpty(itemRD) && itemRD.hasSucceeded) {
this.item$.next(itemRD.payload); this.item$.next(itemRD.payload);
console.dir(itemRD.payload);
this.duplicates$ = itemRD.payload.duplicates.pipe( this.duplicates$ = itemRD.payload.duplicates.pipe(
getFirstCompletedRemoteData(), getFirstCompletedRemoteData(),
map((remoteData: RemoteData<PaginatedList<Duplicate>>) => { map((remoteData: RemoteData<PaginatedList<Duplicate>>) => {
console.dir(remoteData);
if (remoteData.hasSucceeded) { if (remoteData.hasSucceeded) {
if (remoteData.payload.page) { if (remoteData.payload.page) {
return remoteData.payload.page; return remoteData.payload.page;
@@ -124,6 +122,7 @@ export class PoolSearchResultListElementComponent extends SearchResultListElemen
).subscribe(); ).subscribe();
this.showThumbnails = this.appConfig.browseBy.showThumbnails; this.showThumbnails = this.appConfig.browseBy.showThumbnails;
} }
ngOnDestroy() { ngOnDestroy() {

View File

@@ -2,7 +2,7 @@ import { ChangeDetectorRef, Component, NO_ERRORS_SCHEMA } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { NgxPaginationModule } from 'ngx-pagination'; import { NgxPaginationModule } from 'ngx-pagination';
@@ -11,7 +11,6 @@ import { of as observableOf } from 'rxjs';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils';
import { createTestComponent } from '../../../shared/testing/utils.test';
import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub'; import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub';
import { SubmissionService } from '../../submission.service'; import { SubmissionService } from '../../submission.service';
@@ -39,10 +38,6 @@ import { PaginationService } from '../../../core/pagination/pagination.service';
import { PaginationServiceStub } from '../../../shared/testing/pagination-service.stub'; import { PaginationServiceStub } from '../../../shared/testing/pagination-service.stub';
import {Duplicate} from "../../../shared/object-list/duplicate-data/duplicate.model"; import {Duplicate} from "../../../shared/object-list/duplicate-data/duplicate.model";
import {MetadataValue} from "../../../core/shared/metadata.models"; import {MetadataValue} from "../../../core/shared/metadata.models";
import {
WorkspaceitemSectionDuplicatesObject
} from "../../../core/submission/models/workspaceitem-section-duplicates.model";
import {SectionDataObject} from "../models/section-data.model";
import {defaultUUID} from "../../../shared/mocks/uuid.service.mock"; import {defaultUUID} from "../../../shared/mocks/uuid.service.mock";
function getMockSubmissionFormsConfigService(): SubmissionFormsConfigDataService { function getMockSubmissionFormsConfigService(): SubmissionFormsConfigDataService {
@@ -76,19 +71,15 @@ const duplicates: Duplicate[]= [{
'confidence': -1, 'confidence': -1,
'place': 0 'place': 0
})] })]
} },
type: "DUPLICATE"
}]; }];
const potentialDuplicates: WorkspaceitemSectionDuplicatesObject = { const sectionObject = {
potentialDuplicates: duplicates
};
const sectionObject: SectionDataObject = {
header: 'submission.sections.submit.progressbar.duplicates', header: 'submission.sections.submit.progressbar.duplicates',
config: 'https://dspace.org/api/config/submissionforms/duplicates',
mandatory: true, mandatory: true,
opened: true, opened: true,
data: potentialDuplicates, data: {potentialDuplicates: duplicates},
errorsToShow: [], errorsToShow: [],
serverValidationErrors: [], serverValidationErrors: [],
id: 'duplicates', id: 'duplicates',
@@ -160,8 +151,7 @@ describe('SubmissionSectionDuplicatesComponent test suite', () => {
{ provide: 'submissionIdProvider', useValue: submissionId }, { provide: 'submissionIdProvider', useValue: submissionId },
{ provide: PaginationService, useValue: paginationService }, { provide: PaginationService, useValue: paginationService },
ChangeDetectorRef, ChangeDetectorRef,
FormBuilderService, FormBuilderService
SubmissionSectionDuplicatesComponent
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).compileComponents().then(); }).compileComponents().then();
@@ -177,9 +167,9 @@ describe('SubmissionSectionDuplicatesComponent test suite', () => {
sectionsServiceStub.isSectionReadOnly.and.returnValue(observableOf(false)); sectionsServiceStub.isSectionReadOnly.and.returnValue(observableOf(false));
sectionsServiceStub.getSectionErrors.and.returnValue(observableOf([])); sectionsServiceStub.getSectionErrors.and.returnValue(observableOf([]));
sectionsServiceStub.getSectionData.and.returnValue(observableOf(sectionObject)); sectionsServiceStub.getSectionData.and.returnValue(observableOf(sectionObject));
const html = `<ds-submission-section-duplicates></ds-submission-section-duplicates>`; testFixture = TestBed.createComponent(SubmissionSectionDuplicatesComponent);
testFixture = createTestComponent(html, TestComponent) as ComponentFixture<TestComponent>;
testComp = testFixture.componentInstance; testComp = testFixture.componentInstance;
}); });
afterEach(() => { afterEach(() => {
@@ -187,7 +177,7 @@ describe('SubmissionSectionDuplicatesComponent test suite', () => {
}); });
it('should create SubmissionSectionDuplicatesComponent', () => { it('should create SubmissionSectionDuplicatesComponent', () => {
expect(testComp).toBeDefined(); expect(testComp).toBeTruthy();
}); });
}); });
@@ -217,7 +207,7 @@ describe('SubmissionSectionDuplicatesComponent test suite', () => {
sectionsServiceStub.isSectionReadOnly.and.returnValue(observableOf(false)); sectionsServiceStub.isSectionReadOnly.and.returnValue(observableOf(false));
compAsAny.submissionService.getSubmissionScope.and.returnValue(SubmissionScopeType.WorkspaceItem); compAsAny.submissionService.getSubmissionScope.and.returnValue(SubmissionScopeType.WorkspaceItem);
spyOn(comp, 'getSectionStatus').and.returnValue(observableOf(true)); spyOn(comp, 'getSectionStatus').and.returnValue(observableOf(true));
spyOn(comp, 'getDuplicateData').and.returnValue(observableOf(potentialDuplicates)); spyOn(comp, 'getDuplicateData').and.returnValue(observableOf({potentialDuplicates: duplicates}));
expect(comp.isLoading).toBeTruthy(); expect(comp.isLoading).toBeTruthy();
comp.onSectionInit(); comp.onSectionInit();
fixture.detectChanges(); fixture.detectChanges();