[CST-5270] Fixing ISSN removal and unit testing

This commit is contained in:
Rezart Vata
2022-04-28 18:12:15 +02:00
parent e307c5de9f
commit a754a20ec6
4 changed files with 103 additions and 78 deletions

View File

@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Actions, createEffect, ofType } from '@ngrx/effects';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { isEqual, union } from 'lodash'; import { isEqual, isUndefined, union } from 'lodash';
import { from as observableFrom, Observable, of as observableOf } from 'rxjs'; import { from as observableFrom, Observable, of as observableOf } from 'rxjs';
import { catchError, filter, map, mergeMap, switchMap, take, tap, withLatestFrom } from 'rxjs/operators'; import { catchError, filter, map, mergeMap, switchMap, take, tap, withLatestFrom } from 'rxjs/operators';
@@ -43,7 +43,7 @@ import {
UpdateSectionDataAction, UpdateSectionDataAction,
UpdateSectionDataSuccessAction UpdateSectionDataSuccessAction
} from './submission-objects.actions'; } from './submission-objects.actions';
import { SubmissionObjectEntry} from './submission-objects.reducer'; import { SubmissionObjectEntry } from './submission-objects.reducer';
import { Item } from '../../core/shared/item.model'; import { Item } from '../../core/shared/item.model';
import { RemoteData } from '../../core/data/remote-data'; import { RemoteData } from '../../core/data/remote-data';
import { getFirstSucceededRemoteDataPayload } from '../../core/shared/operators'; import { getFirstSucceededRemoteDataPayload } from '../../core/shared/operators';
@@ -60,7 +60,7 @@ export class SubmissionObjectEffects {
/** /**
* Dispatch a [InitSectionAction] for every submission sections and dispatch a [CompleteInitSubmissionFormAction] * Dispatch a [InitSectionAction] for every submission sections and dispatch a [CompleteInitSubmissionFormAction]
*/ */
loadForm$ = createEffect(() => this.actions$.pipe( loadForm$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.INIT_SUBMISSION_FORM), ofType(SubmissionObjectActionTypes.INIT_SUBMISSION_FORM),
map((action: InitSubmissionFormAction) => { map((action: InitSubmissionFormAction) => {
const definition = action.payload.submissionDefinition; const definition = action.payload.submissionDefinition;
@@ -104,7 +104,7 @@ export class SubmissionObjectEffects {
/** /**
* Dispatch a [InitSubmissionFormAction] * Dispatch a [InitSubmissionFormAction]
*/ */
resetForm$ = createEffect(() => this.actions$.pipe( resetForm$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.RESET_SUBMISSION_FORM), ofType(SubmissionObjectActionTypes.RESET_SUBMISSION_FORM),
map((action: ResetSubmissionFormAction) => map((action: ResetSubmissionFormAction) =>
new InitSubmissionFormAction( new InitSubmissionFormAction(
@@ -120,35 +120,35 @@ export class SubmissionObjectEffects {
/** /**
* Dispatch a [SaveSubmissionFormSuccessAction] or a [SaveSubmissionFormErrorAction] on error * Dispatch a [SaveSubmissionFormSuccessAction] or a [SaveSubmissionFormErrorAction] on error
*/ */
saveSubmission$ = createEffect(() => this.actions$.pipe( saveSubmission$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM), ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM),
switchMap((action: SaveSubmissionFormAction) => { switchMap((action: SaveSubmissionFormAction) => {
return this.operationsService.jsonPatchByResourceType( return this.operationsService.jsonPatchByResourceType(
this.submissionService.getSubmissionObjectLinkName(), this.submissionService.getSubmissionObjectLinkName(),
action.payload.submissionId, action.payload.submissionId,
'sections').pipe( 'sections').pipe(
map((response: SubmissionObject[]) => new SaveSubmissionFormSuccessAction(action.payload.submissionId, response, action.payload.isManual, action.payload.isManual)), map((response: SubmissionObject[]) => new SaveSubmissionFormSuccessAction(action.payload.submissionId, response, action.payload.isManual, action.payload.isManual)),
catchError(() => observableOf(new SaveSubmissionFormErrorAction(action.payload.submissionId)))); catchError(() => observableOf(new SaveSubmissionFormErrorAction(action.payload.submissionId))));
}))); })));
/** /**
* Dispatch a [SaveForLaterSubmissionFormSuccessAction] or a [SaveSubmissionFormErrorAction] on error * Dispatch a [SaveForLaterSubmissionFormSuccessAction] or a [SaveSubmissionFormErrorAction] on error
*/ */
saveForLaterSubmission$ = createEffect(() => this.actions$.pipe( saveForLaterSubmission$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_FOR_LATER_SUBMISSION_FORM), ofType(SubmissionObjectActionTypes.SAVE_FOR_LATER_SUBMISSION_FORM),
switchMap((action: SaveForLaterSubmissionFormAction) => { switchMap((action: SaveForLaterSubmissionFormAction) => {
return this.operationsService.jsonPatchByResourceType( return this.operationsService.jsonPatchByResourceType(
this.submissionService.getSubmissionObjectLinkName(), this.submissionService.getSubmissionObjectLinkName(),
action.payload.submissionId, action.payload.submissionId,
'sections').pipe( 'sections').pipe(
map((response: SubmissionObject[]) => new SaveForLaterSubmissionFormSuccessAction(action.payload.submissionId, response)), map((response: SubmissionObject[]) => new SaveForLaterSubmissionFormSuccessAction(action.payload.submissionId, response)),
catchError(() => observableOf(new SaveSubmissionFormErrorAction(action.payload.submissionId)))); catchError(() => observableOf(new SaveSubmissionFormErrorAction(action.payload.submissionId))));
}))); })));
/** /**
* Call parseSaveResponse and dispatch actions * Call parseSaveResponse and dispatch actions
*/ */
saveSubmissionSuccess$ = createEffect(() => this.actions$.pipe( saveSubmissionSuccess$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM_SUCCESS), ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM_SUCCESS),
withLatestFrom(this.store$), withLatestFrom(this.store$),
map(([action, currentState]: [SaveSubmissionFormSuccessAction, any]) => { map(([action, currentState]: [SaveSubmissionFormSuccessAction, any]) => {
@@ -162,7 +162,7 @@ export class SubmissionObjectEffects {
* Call parseSaveResponse and dispatch actions. * Call parseSaveResponse and dispatch actions.
* Notification system is forced to be disabled. * Notification system is forced to be disabled.
*/ */
saveSubmissionSectionSuccess$ = createEffect(() => this.actions$.pipe( saveSubmissionSectionSuccess$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM_SUCCESS), ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM_SUCCESS),
withLatestFrom(this.store$), withLatestFrom(this.store$),
map(([action, currentState]: [SaveSubmissionSectionFormSuccessAction, any]) => { map(([action, currentState]: [SaveSubmissionSectionFormSuccessAction, any]) => {
@@ -174,7 +174,7 @@ export class SubmissionObjectEffects {
/** /**
* Dispatch a [SaveSubmissionSectionFormSuccessAction] or a [SaveSubmissionSectionFormErrorAction] on error * Dispatch a [SaveSubmissionSectionFormSuccessAction] or a [SaveSubmissionSectionFormErrorAction] on error
*/ */
saveSection$ = createEffect(() => this.actions$.pipe( saveSection$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM), ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM),
switchMap((action: SaveSubmissionSectionFormAction) => { switchMap((action: SaveSubmissionSectionFormAction) => {
return this.operationsService.jsonPatchByResourceID( return this.operationsService.jsonPatchByResourceID(
@@ -182,14 +182,14 @@ export class SubmissionObjectEffects {
action.payload.submissionId, action.payload.submissionId,
'sections', 'sections',
action.payload.sectionId).pipe( action.payload.sectionId).pipe(
map((response: SubmissionObject[]) => new SaveSubmissionSectionFormSuccessAction(action.payload.submissionId, response)), map((response: SubmissionObject[]) => new SaveSubmissionSectionFormSuccessAction(action.payload.submissionId, response)),
catchError(() => observableOf(new SaveSubmissionSectionFormErrorAction(action.payload.submissionId)))); catchError(() => observableOf(new SaveSubmissionSectionFormErrorAction(action.payload.submissionId))));
}))); })));
/** /**
* Show a notification on error * Show a notification on error
*/ */
saveError$ = createEffect(() => this.actions$.pipe( saveError$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM_ERROR, SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM_ERROR), ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM_ERROR, SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM_ERROR),
withLatestFrom(this.store$), withLatestFrom(this.store$),
tap(() => this.notificationsService.error(null, this.translate.get('submission.sections.general.save_error_notice')))), { dispatch: false }); tap(() => this.notificationsService.error(null, this.translate.get('submission.sections.general.save_error_notice')))), { dispatch: false });
@@ -197,7 +197,7 @@ export class SubmissionObjectEffects {
/** /**
* Call parseSaveResponse and dispatch actions or dispatch [SaveSubmissionFormErrorAction] on error * Call parseSaveResponse and dispatch actions or dispatch [SaveSubmissionFormErrorAction] on error
*/ */
saveAndDeposit$ = createEffect(() => this.actions$.pipe( saveAndDeposit$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_AND_DEPOSIT_SUBMISSION), ofType(SubmissionObjectActionTypes.SAVE_AND_DEPOSIT_SUBMISSION),
withLatestFrom(this.submissionService.hasUnsavedModification()), withLatestFrom(this.submissionService.hasUnsavedModification()),
switchMap(([action, hasUnsavedModification]: [SaveAndDepositSubmissionAction, boolean]) => { switchMap(([action, hasUnsavedModification]: [SaveAndDepositSubmissionAction, boolean]) => {
@@ -233,7 +233,7 @@ export class SubmissionObjectEffects {
/** /**
* Dispatch a [DepositSubmissionSuccessAction] or a [DepositSubmissionErrorAction] on error * Dispatch a [DepositSubmissionSuccessAction] or a [DepositSubmissionErrorAction] on error
*/ */
depositSubmission$ = createEffect(() => this.actions$.pipe( depositSubmission$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.DEPOSIT_SUBMISSION), ofType(SubmissionObjectActionTypes.DEPOSIT_SUBMISSION),
withLatestFrom(this.store$), withLatestFrom(this.store$),
switchMap(([action, state]: [DepositSubmissionAction, any]) => { switchMap(([action, state]: [DepositSubmissionAction, any]) => {
@@ -245,7 +245,7 @@ export class SubmissionObjectEffects {
/** /**
* Show a notification on success and redirect to MyDSpace page * Show a notification on success and redirect to MyDSpace page
*/ */
saveForLaterSubmissionSuccess$ = createEffect(() => this.actions$.pipe( saveForLaterSubmissionSuccess$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_FOR_LATER_SUBMISSION_FORM_SUCCESS), ofType(SubmissionObjectActionTypes.SAVE_FOR_LATER_SUBMISSION_FORM_SUCCESS),
tap(() => this.notificationsService.success(null, this.translate.get('submission.sections.general.save_success_notice'))), tap(() => this.notificationsService.success(null, this.translate.get('submission.sections.general.save_success_notice'))),
tap(() => this.submissionService.redirectToMyDSpace())), { dispatch: false }); tap(() => this.submissionService.redirectToMyDSpace())), { dispatch: false });
@@ -253,7 +253,7 @@ export class SubmissionObjectEffects {
/** /**
* Show a notification on success and redirect to MyDSpace page * Show a notification on success and redirect to MyDSpace page
*/ */
depositSubmissionSuccess$ = createEffect(() => this.actions$.pipe( depositSubmissionSuccess$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.DEPOSIT_SUBMISSION_SUCCESS), ofType(SubmissionObjectActionTypes.DEPOSIT_SUBMISSION_SUCCESS),
tap(() => this.notificationsService.success(null, this.translate.get('submission.sections.general.deposit_success_notice'))), tap(() => this.notificationsService.success(null, this.translate.get('submission.sections.general.deposit_success_notice'))),
tap(() => this.submissionService.redirectToMyDSpace())), { dispatch: false }); tap(() => this.submissionService.redirectToMyDSpace())), { dispatch: false });
@@ -261,14 +261,14 @@ export class SubmissionObjectEffects {
/** /**
* Show a notification on error * Show a notification on error
*/ */
depositSubmissionError$ = createEffect(() => this.actions$.pipe( depositSubmissionError$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.DEPOSIT_SUBMISSION_ERROR), ofType(SubmissionObjectActionTypes.DEPOSIT_SUBMISSION_ERROR),
tap(() => this.notificationsService.error(null, this.translate.get('submission.sections.general.deposit_error_notice')))), { dispatch: false }); tap(() => this.notificationsService.error(null, this.translate.get('submission.sections.general.deposit_error_notice')))), { dispatch: false });
/** /**
* Dispatch a [DiscardSubmissionSuccessAction] or a [DiscardSubmissionErrorAction] on error * Dispatch a [DiscardSubmissionSuccessAction] or a [DiscardSubmissionErrorAction] on error
*/ */
discardSubmission$ = createEffect(() => this.actions$.pipe( discardSubmission$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.DISCARD_SUBMISSION), ofType(SubmissionObjectActionTypes.DISCARD_SUBMISSION),
switchMap((action: DepositSubmissionAction) => { switchMap((action: DepositSubmissionAction) => {
return this.submissionService.discardSubmission(action.payload.submissionId).pipe( return this.submissionService.discardSubmission(action.payload.submissionId).pipe(
@@ -279,7 +279,7 @@ export class SubmissionObjectEffects {
/** /**
* Adds all metadata an item to the SubmissionForm sections of the submission * Adds all metadata an item to the SubmissionForm sections of the submission
*/ */
addAllMetadataToSectionData = createEffect(() => this.actions$.pipe( addAllMetadataToSectionData = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.UPDATE_SECTION_DATA), ofType(SubmissionObjectActionTypes.UPDATE_SECTION_DATA),
switchMap((action: UpdateSectionDataAction) => { switchMap((action: UpdateSectionDataAction) => {
return this.sectionService.getSectionState(action.payload.submissionId, action.payload.sectionId, SectionsType.Upload) return this.sectionService.getSectionState(action.payload.submissionId, action.payload.sectionId, SectionsType.Upload)
@@ -320,18 +320,18 @@ export class SubmissionObjectEffects {
/** /**
* Show a notification on error * Show a notification on error
*/ */
discardSubmissionError$ = createEffect(() => this.actions$.pipe( discardSubmissionError$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.DISCARD_SUBMISSION_ERROR), ofType(SubmissionObjectActionTypes.DISCARD_SUBMISSION_ERROR),
tap(() => this.notificationsService.error(null, this.translate.get('submission.sections.general.discard_error_notice')))), { dispatch: false }); tap(() => this.notificationsService.error(null, this.translate.get('submission.sections.general.discard_error_notice')))), { dispatch: false });
constructor(private actions$: Actions, constructor(private actions$: Actions,
private notificationsService: NotificationsService, private notificationsService: NotificationsService,
private operationsService: SubmissionJsonPatchOperationsService, private operationsService: SubmissionJsonPatchOperationsService,
private sectionService: SectionsService, private sectionService: SectionsService,
private store$: Store<any>, private store$: Store<any>,
private submissionService: SubmissionService, private submissionService: SubmissionService,
private submissionObjectService: SubmissionObjectDataService, private submissionObjectService: SubmissionObjectDataService,
private translate: TranslateService) { private translate: TranslateService) {
} }
/** /**
@@ -426,6 +426,11 @@ export class SubmissionObjectEffects {
mappedActions.push(new UpdateSectionDataAction(submissionId, sectionId, sectionData, filteredErrors, sectionErrors)); mappedActions.push(new UpdateSectionDataAction(submissionId, sectionId, sectionData, filteredErrors, sectionErrors));
} }
}); });
let currentStateId = currentState.selfUrl.split('/')[currentState.selfUrl.split('/').length - 1];
let currentResponseItem = response.find(item => item.id.toString() === currentStateId);
if (!isUndefined(currentState.sections.sherpaPolicies?.data) && isUndefined(currentResponseItem.sections.sherpaPolicies)) {
mappedActions.push(new UpdateSectionDataAction(submissionId, 'sherpaPolicies', null, [], []));
}
} }
return mappedActions; return mappedActions;
} }

View File

@@ -1,57 +1,62 @@
<ds-alert [type]="'alert-info'" *ngIf="hasNoData()" [content]="'submission.sections.sherpa-policy.title-empty'"> <ds-alert [type]="'alert-info'" *ngIf="hasNoData()" [content]="'submission.sections.sherpa-policy.title-empty'">
</ds-alert> </ds-alert>
<div class="refresh-container mt-2 mb-2"> <div *ngIf="!hasNoData()" class="refresh-container mt-2 mb-2">
<button type="button" class="btn btn-secondary pull-right" (click)="refresh()"> <button type="button" class="btn btn-secondary pull-right" (click)="refresh()">
<span><i class="fas fa-sync"></i> {{'submission.sections.sherpa.publisher.policy.refresh' | translate}} </span> <span><i class="fas fa-sync"></i> {{'submission.sections.sherpa.publisher.policy.refresh' | translate}} </span>
</button> </button>
</div> </div>
<ngb-accordion *ngVar="(sherpaPoliciesData$ | async)?.sherpaResponse as sherpaData" #acc="ngbAccordion"> <ngb-accordion *ngVar="(sherpaPoliciesData$ | async)?.sherpaResponse as sherpaData" #acc="ngbAccordion">
<ng-container *ngFor="let journal of sherpaData.journals;let j=index;"> <ng-container *ngIf="!hasNoData()">
<ngb-panel id="publication-information-{{j}}"> <ng-container *ngFor="let journal of sherpaData.journals;let j=index;">
<ng-template ngbPanelTitle> <ngb-panel id="publication-information-{{j}}">
<div class="d-inline-block float-left">
<span *ngIf="!acc.isExpanded('publication-information-{{j}}')"
class="fas fa-chevron-up fa-fw"></span>
<span *ngIf="acc.isExpanded('publication-information-{{j}}')"
class="fas fa-chevron-down fa-fw"></span>
</div>
<span class="float-left section-title"
tabindex="0">{{'submission.sections.sherpa.publication.information'
| translate}}</span>
</ng-template>
<ng-template ngbPanelContent>
<ds-publication-information [journal]="journal"></ds-publication-information>
</ng-template>
</ngb-panel>
<ng-container *ngFor="let policy of journal.policies">
<ngb-panel id="publisher-policy-{{j}}">
<ng-template ngbPanelTitle> <ng-template ngbPanelTitle>
<div class="d-inline-block float-left"> <div class="d-inline-block float-left">
<span *ngIf="!acc.isExpanded('publisher-policy-{{j}}')" class="fas fa-chevron-up fa-fw"></span> <span *ngIf="!acc.isExpanded('publication-information-{{j}}')"
<span *ngIf="acc.isExpanded('publisher-policy-{{j}}')" class="fas fa-chevron-down fa-fw"></span> class="fas fa-chevron-up fa-fw"></span>
<span *ngIf="acc.isExpanded('publication-information-{{j}}')"
class="fas fa-chevron-down fa-fw"></span>
</div> </div>
<span class="float-left section-title" tabindex="0">{{'submission.sections.sherpa.publisher.policy' <span class="float-left section-title"
tabindex="0">{{'submission.sections.sherpa.publication.information'
| translate}}</span> | translate}}</span>
</ng-template> </ng-template>
<ng-template ngbPanelContent> <ng-template ngbPanelContent>
<ds-publisher-policy [policy]="policy"></ds-publisher-policy> <ds-publication-information [journal]="journal"></ds-publication-information>
</ng-template> </ng-template>
</ngb-panel> </ngb-panel>
<ng-container *ngFor="let policy of journal.policies; let p=index;">
<ngb-panel id="publisher-policy-{{j}}-{{p}}">
<ng-template ngbPanelTitle>
<div class="d-inline-block float-left">
<span *ngIf="!acc.isExpanded('publisher-policy-{{j}}-{{p}}')"
class="fas fa-chevron-up fa-fw"></span>
<span *ngIf="acc.isExpanded('publisher-policy-{{j}}-{{p}}')"
class="fas fa-chevron-down fa-fw"></span>
</div>
<span class="float-left section-title"
tabindex="0">{{'submission.sections.sherpa.publisher.policy'
| translate}}</span>
</ng-template>
<ng-template ngbPanelContent>
<ds-publisher-policy [policy]="policy"></ds-publisher-policy>
</ng-template>
</ngb-panel>
</ng-container>
</ng-container> </ng-container>
<ngb-panel id="metadata">
<ng-template ngbPanelTitle>
<div class="d-inline-block float-left">
<span *ngIf="!acc.isExpanded('metadata')" class="fas fa-chevron-up fa-fw"></span>
<span *ngIf="acc.isExpanded('metadata')" class="fas fa-chevron-down fa-fw"></span>
</div>
<span class="float-left section-title" tabindex="0">{{'submission.sections.sherpa.record.information'
| translate}}</span>
</ng-template>
<ng-template ngbPanelContent>
<ds-metadata-information [metadata]="sherpaData.metadata"></ds-metadata-information>
</ng-template>
</ngb-panel>
</ng-container> </ng-container>
<ngb-panel id="metadata"> </ngb-accordion>
<ng-template ngbPanelTitle>
<div class="d-inline-block float-left">
<span *ngIf="!acc.isExpanded('metadata')" class="fas fa-chevron-up fa-fw"></span>
<span *ngIf="acc.isExpanded('metadata')" class="fas fa-chevron-down fa-fw"></span>
</div>
<span class="float-left section-title" tabindex="0">{{'submission.sections.sherpa.record.information'
| translate}}</span>
</ng-template>
<ng-template ngbPanelContent>
<ds-metadata-information [metadata]="sherpaData.metadata"></ds-metadata-information>
</ng-template>
</ngb-panel>
</ngb-accordion>

View File

@@ -1,7 +1,8 @@
import { SharedModule } from './../../../shared/shared.module';
import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap'; import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap';
import { SubmissionServiceStub } from '../../../shared/testing/submission-service.stub'; import { SubmissionServiceStub } from '../../../shared/testing/submission-service.stub';
import { SherpaDataResponse } from '../../../shared/mocks/section-sherpa-policies.service.mock'; import { SherpaDataResponse } from '../../../shared/mocks/section-sherpa-policies.service.mock';
import { ComponentFixture, inject, TestBed } from '@angular/core/testing'; import { ComponentFixture, inject, TestBed, fakeAsync, tick } from '@angular/core/testing';
import { SectionsService } from '../sections.service'; import { SectionsService } from '../sections.service';
import { SectionsServiceStub } from '../../../shared/testing/sections-service.stub'; import { SectionsServiceStub } from '../../../shared/testing/sections-service.stub';
@@ -58,7 +59,8 @@ describe('SubmissionSectionSherpaPoliciesComponent', () => {
useClass: TranslateLoaderMock useClass: TranslateLoaderMock
} }
}), }),
NgbAccordionModule NgbAccordionModule,
SharedModule
], ],
declarations: [SubmissionSectionSherpaPoliciesComponent], declarations: [SubmissionSectionSherpaPoliciesComponent],
providers: [ providers: [
@@ -77,7 +79,7 @@ describe('SubmissionSectionSherpaPoliciesComponent', () => {
fixture = TestBed.createComponent(SubmissionSectionSherpaPoliciesComponent); fixture = TestBed.createComponent(SubmissionSectionSherpaPoliciesComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
de = fixture.debugElement; de = fixture.debugElement;
sectionsServiceStub.getSectionData.and.returnValue(observableOf(SherpaDataResponse)) sectionsServiceStub.getSectionData.and.returnValue(observableOf(SherpaDataResponse));
fixture.detectChanges(); fixture.detectChanges();
})); }));
@@ -112,7 +114,6 @@ describe('SubmissionSectionSherpaPoliciesComponent', () => {
it('when refresh button click operationsBuilder.remove should have been called', () => { it('when refresh button click operationsBuilder.remove should have been called', () => {
de.query(By.css('.refresh-container > button')).nativeElement.click(); de.query(By.css('.refresh-container > button')).nativeElement.click();
fixture.detectChanges();
expect(operationsBuilder.remove).toHaveBeenCalled(); expect(operationsBuilder.remove).toHaveBeenCalled();
}); });

View File

@@ -1,6 +1,6 @@
import { Component, Inject, QueryList, ViewChildren } from '@angular/core'; import { Component, Inject, QueryList, ViewChildren } from '@angular/core';
import { BehaviorSubject, Observable, of, Subscription } from 'rxjs'; import { BehaviorSubject, interval, Observable, of, Subscription } from 'rxjs';
import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner'; import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner';
import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder'; import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
@@ -14,6 +14,7 @@ import { SectionsService } from '../sections.service';
import { SectionModelComponent } from '../models/section.model'; import { SectionModelComponent } from '../models/section.model';
import { SubmissionService } from '../../submission.service'; import { SubmissionService } from '../../submission.service';
import { hasValue, isEmpty } from '../../../shared/empty.util'; import { hasValue, isEmpty } from '../../../shared/empty.util';
import { debounce, debounceTime, timeInterval } from 'rxjs/operators';
/** /**
* This component represents a section for managing item's access conditions. * This component represents a section for managing item's access conditions.
@@ -77,9 +78,11 @@ export class SubmissionSectionSherpaPoliciesComponent extends SectionModelCompon
* Expand all primary accordions * Expand all primary accordions
*/ */
ngAfterViewInit() { ngAfterViewInit() {
this.acc.forEach(accordion => { if (this.acc) {
accordion.expandAll(); this.acc.forEach(accordion => {
}); accordion.expandAll();
});
}
} }
@@ -93,9 +96,20 @@ export class SubmissionSectionSherpaPoliciesComponent extends SectionModelCompon
this.sectionService.getSectionData(this.submissionId, this.sectionData.id, this.sectionData.sectionType) this.sectionService.getSectionData(this.submissionId, this.sectionData.id, this.sectionData.sectionType)
.subscribe((sherpaPolicies: WorkspaceitemSectionSherpaPoliciesObject) => { .subscribe((sherpaPolicies: WorkspaceitemSectionSherpaPoliciesObject) => {
this.sherpaPoliciesData$.next(sherpaPolicies); this.sherpaPoliciesData$.next(sherpaPolicies);
console.log(this.sherpaPoliciesData$.value)
}) })
); );
this.subs.push(
this.sherpaPoliciesData$.pipe(
debounceTime(500)
).subscribe((sherpaPolicies: WorkspaceitemSectionSherpaPoliciesObject) => {
if (this.acc) {
this.acc.forEach(accordion => {
accordion.expandAll();
});
}
})
);
} }
/** /**