From 82b7b8aa6f82a8ddec162bc8743415d1699c4b6f Mon Sep 17 00:00:00 2001 From: Alessandro Martelli Date: Mon, 16 Nov 2020 19:09:17 +0100 Subject: [PATCH] [835] Auto-save in new Item Submission form breaks the form Notifications are enable only for manual submission savings. --- .../shared/testing/submission-service.stub.ts | 1 + .../submission-form-footer.component.spec.ts | 4 +- .../submission-form-footer.component.ts | 2 +- .../objects/submission-objects.actions.ts | 5 +- .../submission-objects.effects.spec.ts | 46 +++++++++++++++++++ .../objects/submission-objects.effects.ts | 2 +- src/app/submission/submission.service.spec.ts | 9 ++++ src/app/submission/submission.service.ts | 14 ++++++ 8 files changed, 77 insertions(+), 6 deletions(-) diff --git a/src/app/shared/testing/submission-service.stub.ts b/src/app/shared/testing/submission-service.stub.ts index 35c3ddfee0..7550201c9f 100644 --- a/src/app/shared/testing/submission-service.stub.ts +++ b/src/app/shared/testing/submission-service.stub.ts @@ -9,6 +9,7 @@ export class SubmissionServiceStub { dispatchDeposit = jasmine.createSpy('dispatchDeposit'); dispatchDiscard = jasmine.createSpy('dispatchDiscard'); dispatchSave = jasmine.createSpy('dispatchSave'); + dispatchManualSave = jasmine.createSpy('dispatchManualSave'); dispatchSaveForLater = jasmine.createSpy('dispatchSaveForLater'); dispatchSaveSection = jasmine.createSpy('dispatchSaveSection'); getActiveSectionId = jasmine.createSpy('getActiveSectionId'); diff --git a/src/app/submission/form/footer/submission-form-footer.component.spec.ts b/src/app/submission/form/footer/submission-form-footer.component.spec.ts index d9d58aa4f2..8f278fe17a 100644 --- a/src/app/submission/form/footer/submission-form-footer.component.spec.ts +++ b/src/app/submission/form/footer/submission-form-footer.component.spec.ts @@ -164,12 +164,12 @@ describe('SubmissionFormFooterComponent Component', () => { }); }); - it('should call dispatchSave on save', () => { + it('should call dispatchManualSave on save', () => { comp.save(null); fixture.detectChanges(); - expect(submissionServiceStub.dispatchSave).toHaveBeenCalledWith(submissionId); + expect(submissionServiceStub.dispatchManualSave).toHaveBeenCalledWith(submissionId); }); it('should call dispatchSaveForLater on save for later', () => { diff --git a/src/app/submission/form/footer/submission-form-footer.component.ts b/src/app/submission/form/footer/submission-form-footer.component.ts index 1b885b98b8..96179430b8 100644 --- a/src/app/submission/form/footer/submission-form-footer.component.ts +++ b/src/app/submission/form/footer/submission-form-footer.component.ts @@ -80,7 +80,7 @@ export class SubmissionFormFooterComponent implements OnChanges { * Dispatch a submission save action */ save(event) { - this.submissionService.dispatchSave(this.submissionId); + this.submissionService.dispatchManualSave(this.submissionId); } /** diff --git a/src/app/submission/objects/submission-objects.actions.ts b/src/app/submission/objects/submission-objects.actions.ts index 73c070846c..2eed4f2c92 100644 --- a/src/app/submission/objects/submission-objects.actions.ts +++ b/src/app/submission/objects/submission-objects.actions.ts @@ -368,6 +368,7 @@ export class SaveSubmissionFormAction implements Action { type = SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM; payload: { submissionId: string; + isManual?: boolean; }; /** @@ -376,8 +377,8 @@ export class SaveSubmissionFormAction implements Action { * @param submissionId * the submission's ID */ - constructor(submissionId: string) { - this.payload = { submissionId }; + constructor(submissionId: string, isManual: boolean = false) { + this.payload = { submissionId, isManual }; } } diff --git a/src/app/submission/objects/submission-objects.effects.spec.ts b/src/app/submission/objects/submission-objects.effects.spec.ts index 7a9d6977e8..ae0fa04ed5 100644 --- a/src/app/submission/objects/submission-objects.effects.spec.ts +++ b/src/app/submission/objects/submission-objects.effects.spec.ts @@ -211,6 +211,52 @@ describe('SubmissionObjectEffects test suite', () => { expect(submissionObjectEffects.saveSubmission$).toBeObservable(expected); }); + it('should enable notifications if is manual', () => { + actions = hot('--a-', { + a: { + type: SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM, + payload: { + submissionId: submissionId, + isManual: true + } + } + }); + + submissionJsonPatchOperationsServiceStub.jsonPatchByResourceType.and.returnValue(observableOf(mockSubmissionRestResponse)); + const expected = cold('--b-', { + b: new SaveSubmissionFormSuccessAction( + submissionId, + mockSubmissionRestResponse as any, + true + ) + }); + + expect(submissionObjectEffects.saveSubmission$).toBeObservable(expected); + }); + + it('should disable notifications if is not manual', () => { + actions = hot('--a-', { + a: { + type: SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM, + payload: { + submissionId: submissionId, + isManual: false + } + } + }); + + submissionJsonPatchOperationsServiceStub.jsonPatchByResourceType.and.returnValue(observableOf(mockSubmissionRestResponse)); + const expected = cold('--b-', { + b: new SaveSubmissionFormSuccessAction( + submissionId, + mockSubmissionRestResponse as any, + false + ) + }); + + expect(submissionObjectEffects.saveSubmission$).toBeObservable(expected); + }); + it('should return a SAVE_SUBMISSION_FORM_ERROR action on error', () => { actions = hot('--a-', { a: { diff --git a/src/app/submission/objects/submission-objects.effects.ts b/src/app/submission/objects/submission-objects.effects.ts index f882470f48..09a6f47104 100644 --- a/src/app/submission/objects/submission-objects.effects.ts +++ b/src/app/submission/objects/submission-objects.effects.ts @@ -132,7 +132,7 @@ export class SubmissionObjectEffects { this.submissionService.getSubmissionObjectLinkName(), action.payload.submissionId, 'sections').pipe( - map((response: SubmissionObject[]) => new SaveSubmissionFormSuccessAction(action.payload.submissionId, response)), + map((response: SubmissionObject[]) => new SaveSubmissionFormSuccessAction(action.payload.submissionId, response, action.payload.isManual)), catchError(() => observableOf(new SaveSubmissionFormErrorAction(action.payload.submissionId)))); })); diff --git a/src/app/submission/submission.service.spec.ts b/src/app/submission/submission.service.spec.ts index 14c369581a..076028d550 100644 --- a/src/app/submission/submission.service.spec.ts +++ b/src/app/submission/submission.service.spec.ts @@ -494,6 +494,15 @@ describe('SubmissionService test suite', () => { }); }); + describe('dispatchManualSave', () => { + it('should dispatch a new SaveSubmissionFormAction', () => { + service.dispatchManualSave(submissionId,); + const expected = new SaveSubmissionFormAction(submissionId, true); + + expect((service as any).store.dispatch).toHaveBeenCalledWith(expected); + }); + }); + describe('dispatchSaveForLater', () => { it('should dispatch a new SaveForLaterSubmissionFormAction', () => { service.dispatchSaveForLater(submissionId,); diff --git a/src/app/submission/submission.service.ts b/src/app/submission/submission.service.ts index 728c860ca9..895e68dba6 100644 --- a/src/app/submission/submission.service.ts +++ b/src/app/submission/submission.service.ts @@ -204,6 +204,20 @@ export class SubmissionService { this.store.dispatch(new DiscardSubmissionAction(submissionId)); } + /** + * Dispatch a new [SaveSubmissionFormAction] + * + * @param submissionId + * The submission id + */ + dispatchManualSave(submissionId) { + this.getSubmissionSaveProcessingStatus(submissionId).pipe( + find((isPending: boolean) => !isPending) + ).subscribe(() => { + this.store.dispatch(new SaveSubmissionFormAction(submissionId, true)); + }) + } + /** * Dispatch a new [SaveSubmissionFormAction] *