[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 { Store } from '@ngrx/store';
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 { catchError, filter, map, mergeMap, switchMap, take, tap, withLatestFrom } from 'rxjs/operators';
@@ -43,7 +43,7 @@ import {
UpdateSectionDataAction,
UpdateSectionDataSuccessAction
} from './submission-objects.actions';
import { SubmissionObjectEntry} from './submission-objects.reducer';
import { SubmissionObjectEntry } from './submission-objects.reducer';
import { Item } from '../../core/shared/item.model';
import { RemoteData } from '../../core/data/remote-data';
import { getFirstSucceededRemoteDataPayload } from '../../core/shared/operators';
@@ -60,7 +60,7 @@ export class SubmissionObjectEffects {
/**
* 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),
map((action: InitSubmissionFormAction) => {
const definition = action.payload.submissionDefinition;
@@ -104,7 +104,7 @@ export class SubmissionObjectEffects {
/**
* Dispatch a [InitSubmissionFormAction]
*/
resetForm$ = createEffect(() => this.actions$.pipe(
resetForm$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.RESET_SUBMISSION_FORM),
map((action: ResetSubmissionFormAction) =>
new InitSubmissionFormAction(
@@ -120,35 +120,35 @@ export class SubmissionObjectEffects {
/**
* Dispatch a [SaveSubmissionFormSuccessAction] or a [SaveSubmissionFormErrorAction] on error
*/
saveSubmission$ = createEffect(() => this.actions$.pipe(
saveSubmission$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM),
switchMap((action: SaveSubmissionFormAction) => {
return this.operationsService.jsonPatchByResourceType(
this.submissionService.getSubmissionObjectLinkName(),
action.payload.submissionId,
'sections').pipe(
map((response: SubmissionObject[]) => new SaveSubmissionFormSuccessAction(action.payload.submissionId, response, action.payload.isManual, action.payload.isManual)),
catchError(() => observableOf(new SaveSubmissionFormErrorAction(action.payload.submissionId))));
map((response: SubmissionObject[]) => new SaveSubmissionFormSuccessAction(action.payload.submissionId, response, action.payload.isManual, action.payload.isManual)),
catchError(() => observableOf(new SaveSubmissionFormErrorAction(action.payload.submissionId))));
})));
/**
* 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),
switchMap((action: SaveForLaterSubmissionFormAction) => {
return this.operationsService.jsonPatchByResourceType(
this.submissionService.getSubmissionObjectLinkName(),
action.payload.submissionId,
'sections').pipe(
map((response: SubmissionObject[]) => new SaveForLaterSubmissionFormSuccessAction(action.payload.submissionId, response)),
catchError(() => observableOf(new SaveSubmissionFormErrorAction(action.payload.submissionId))));
map((response: SubmissionObject[]) => new SaveForLaterSubmissionFormSuccessAction(action.payload.submissionId, response)),
catchError(() => observableOf(new SaveSubmissionFormErrorAction(action.payload.submissionId))));
})));
/**
* Call parseSaveResponse and dispatch actions
*/
saveSubmissionSuccess$ = createEffect(() => this.actions$.pipe(
saveSubmissionSuccess$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM_SUCCESS),
withLatestFrom(this.store$),
map(([action, currentState]: [SaveSubmissionFormSuccessAction, any]) => {
@@ -162,7 +162,7 @@ export class SubmissionObjectEffects {
* Call parseSaveResponse and dispatch actions.
* Notification system is forced to be disabled.
*/
saveSubmissionSectionSuccess$ = createEffect(() => this.actions$.pipe(
saveSubmissionSectionSuccess$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM_SUCCESS),
withLatestFrom(this.store$),
map(([action, currentState]: [SaveSubmissionSectionFormSuccessAction, any]) => {
@@ -174,7 +174,7 @@ export class SubmissionObjectEffects {
/**
* Dispatch a [SaveSubmissionSectionFormSuccessAction] or a [SaveSubmissionSectionFormErrorAction] on error
*/
saveSection$ = createEffect(() => this.actions$.pipe(
saveSection$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM),
switchMap((action: SaveSubmissionSectionFormAction) => {
return this.operationsService.jsonPatchByResourceID(
@@ -182,14 +182,14 @@ export class SubmissionObjectEffects {
action.payload.submissionId,
'sections',
action.payload.sectionId).pipe(
map((response: SubmissionObject[]) => new SaveSubmissionSectionFormSuccessAction(action.payload.submissionId, response)),
catchError(() => observableOf(new SaveSubmissionSectionFormErrorAction(action.payload.submissionId))));
map((response: SubmissionObject[]) => new SaveSubmissionSectionFormSuccessAction(action.payload.submissionId, response)),
catchError(() => observableOf(new SaveSubmissionSectionFormErrorAction(action.payload.submissionId))));
})));
/**
* 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),
withLatestFrom(this.store$),
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
*/
saveAndDeposit$ = createEffect(() => this.actions$.pipe(
saveAndDeposit$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_AND_DEPOSIT_SUBMISSION),
withLatestFrom(this.submissionService.hasUnsavedModification()),
switchMap(([action, hasUnsavedModification]: [SaveAndDepositSubmissionAction, boolean]) => {
@@ -233,7 +233,7 @@ export class SubmissionObjectEffects {
/**
* Dispatch a [DepositSubmissionSuccessAction] or a [DepositSubmissionErrorAction] on error
*/
depositSubmission$ = createEffect(() => this.actions$.pipe(
depositSubmission$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.DEPOSIT_SUBMISSION),
withLatestFrom(this.store$),
switchMap(([action, state]: [DepositSubmissionAction, any]) => {
@@ -245,7 +245,7 @@ export class SubmissionObjectEffects {
/**
* 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),
tap(() => this.notificationsService.success(null, this.translate.get('submission.sections.general.save_success_notice'))),
tap(() => this.submissionService.redirectToMyDSpace())), { dispatch: false });
@@ -253,7 +253,7 @@ export class SubmissionObjectEffects {
/**
* 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),
tap(() => this.notificationsService.success(null, this.translate.get('submission.sections.general.deposit_success_notice'))),
tap(() => this.submissionService.redirectToMyDSpace())), { dispatch: false });
@@ -261,14 +261,14 @@ export class SubmissionObjectEffects {
/**
* Show a notification on error
*/
depositSubmissionError$ = createEffect(() => this.actions$.pipe(
depositSubmissionError$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.DEPOSIT_SUBMISSION_ERROR),
tap(() => this.notificationsService.error(null, this.translate.get('submission.sections.general.deposit_error_notice')))), { dispatch: false });
/**
* Dispatch a [DiscardSubmissionSuccessAction] or a [DiscardSubmissionErrorAction] on error
*/
discardSubmission$ = createEffect(() => this.actions$.pipe(
discardSubmission$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.DISCARD_SUBMISSION),
switchMap((action: DepositSubmissionAction) => {
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
*/
addAllMetadataToSectionData = createEffect(() => this.actions$.pipe(
addAllMetadataToSectionData = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.UPDATE_SECTION_DATA),
switchMap((action: UpdateSectionDataAction) => {
return this.sectionService.getSectionState(action.payload.submissionId, action.payload.sectionId, SectionsType.Upload)
@@ -320,18 +320,18 @@ export class SubmissionObjectEffects {
/**
* Show a notification on error
*/
discardSubmissionError$ = createEffect(() => this.actions$.pipe(
discardSubmissionError$ = createEffect(() => this.actions$.pipe(
ofType(SubmissionObjectActionTypes.DISCARD_SUBMISSION_ERROR),
tap(() => this.notificationsService.error(null, this.translate.get('submission.sections.general.discard_error_notice')))), { dispatch: false });
constructor(private actions$: Actions,
private notificationsService: NotificationsService,
private operationsService: SubmissionJsonPatchOperationsService,
private sectionService: SectionsService,
private store$: Store<any>,
private submissionService: SubmissionService,
private submissionObjectService: SubmissionObjectDataService,
private translate: TranslateService) {
private notificationsService: NotificationsService,
private operationsService: SubmissionJsonPatchOperationsService,
private sectionService: SectionsService,
private store$: Store<any>,
private submissionService: SubmissionService,
private submissionObjectService: SubmissionObjectDataService,
private translate: TranslateService) {
}
/**
@@ -426,6 +426,11 @@ export class SubmissionObjectEffects {
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;
}