diff --git a/src/app/submission/form/footer/submission-form-footer.component.html b/src/app/submission/form/footer/submission-form-footer.component.html
index 4964eb56a2..e954fab34c 100644
--- a/src/app/submission/form/footer/submission-form-footer.component.html
+++ b/src/app/submission/form/footer/submission-form-footer.component.html
@@ -41,7 +41,7 @@
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 dd47dad444..072f826deb 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
@@ -201,13 +201,13 @@ describe('SubmissionFormFooterComponent Component', () => {
});
});
- it('should have deposit button disabled when submission is not valid', () => {
+ it('should not have deposit button disabled when submission is not valid', () => {
comp.showDepositAndDiscard = observableOf(true);
compAsAny.submissionIsInvalid = observableOf(true);
fixture.detectChanges();
const depositBtn: any = fixture.debugElement.query(By.css('.btn-success'));
- expect(depositBtn.nativeElement.disabled).toBeTruthy();
+ expect(depositBtn.nativeElement.disabled).toBeFalsy();
});
it('should not have deposit button disabled when submission is valid', () => {
diff --git a/src/app/submission/objects/submission-objects.effects.spec.ts b/src/app/submission/objects/submission-objects.effects.spec.ts
index 122ebd90ac..b2bc054287 100644
--- a/src/app/submission/objects/submission-objects.effects.spec.ts
+++ b/src/app/submission/objects/submission-objects.effects.spec.ts
@@ -54,6 +54,8 @@ import { Item } from '../../core/shared/item.model';
import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-data.service';
import { WorkflowItemDataService } from '../../core/submission/workflowitem-data.service';
import { HALEndpointService } from '../../core/shared/hal-endpoint.service';
+import { SubmissionObjectDataService } from '../../core/submission/submission-object-data.service';
+import { mockSubmissionObjectDataService } from '../../shared/testing/submission-oject-data-service.mock';
describe('SubmissionObjectEffects test suite', () => {
let submissionObjectEffects: SubmissionObjectEffects;
@@ -63,6 +65,7 @@ describe('SubmissionObjectEffects test suite', () => {
let notificationsServiceStub;
let submissionServiceStub;
let submissionJsonPatchOperationsServiceStub;
+ let submissionObjectDataServiceStub;
const collectionId: string = mockSubmissionCollectionId;
const submissionId: string = mockSubmissionId;
const submissionDefinitionResponse: any = mockSubmissionDefinitionResponse;
@@ -75,6 +78,9 @@ describe('SubmissionObjectEffects test suite', () => {
notificationsServiceStub = new NotificationsServiceStub();
submissionServiceStub = new SubmissionServiceStub();
submissionJsonPatchOperationsServiceStub = new SubmissionJsonPatchOperationsServiceStub();
+ submissionObjectDataServiceStub = mockSubmissionObjectDataService;
+
+ submissionServiceStub.hasUnsavedModification.and.returnValue(observableOf(true));
TestBed.configureTestingModule({
imports: [
@@ -99,6 +105,7 @@ describe('SubmissionObjectEffects test suite', () => {
{ provide: WorkflowItemDataService, useValue: {} },
{ provide: WorkflowItemDataService, useValue: {} },
{ provide: HALEndpointService, useValue: {} },
+ { provide: SubmissionObjectDataService, useValue: submissionObjectDataServiceStub },
],
});
@@ -879,7 +886,7 @@ describe('SubmissionObjectEffects test suite', () => {
expect(submissionObjectEffects.saveAndDeposit$).toBeObservable(expected);
});
- it('should not allow to deposit when there are errors', () => {
+ it('should return a SAVE_SUBMISSION_FORM_SUCCESS action when there are errors', () => {
store.nextState({
submission: {
objects: submissionState
@@ -902,31 +909,8 @@ describe('SubmissionObjectEffects test suite', () => {
submissionJsonPatchOperationsServiceStub.jsonPatchByResourceType.and.returnValue(observableOf(response));
- const errorsList = parseSectionErrors(mockSectionsErrors);
const expected = cold('--b-', {
- b: [
- new UpdateSectionDataAction(
- submissionId,
- 'traditionalpageone',
- mockSectionsData.traditionalpageone as any,
- errorsList.traditionalpageone || [],
- errorsList.traditionalpageone || []
- ),
- new UpdateSectionDataAction(
- submissionId,
- 'license',
- mockSectionsData.license as any,
- errorsList.license || [],
- errorsList.license || []
- ),
- new UpdateSectionDataAction(
- submissionId,
- 'upload',
- mockSectionsData.upload as any,
- errorsList.upload || [],
- errorsList.upload || []
- )
- ]
+ b: new SaveSubmissionFormSuccessAction(submissionId, response as any[])
});
expect(submissionObjectEffects.saveAndDeposit$).toBeObservable(expected);
diff --git a/src/app/submission/objects/submission-objects.effects.ts b/src/app/submission/objects/submission-objects.effects.ts
index b4ba1c2480..257854f027 100644
--- a/src/app/submission/objects/submission-objects.effects.ts
+++ b/src/app/submission/objects/submission-objects.effects.ts
@@ -196,19 +196,26 @@ export class SubmissionObjectEffects {
*/
@Effect() saveAndDeposit$ = this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_AND_DEPOSIT_SUBMISSION),
- withLatestFrom(this.store$),
- switchMap(([action, currentState]: [SaveAndDepositSubmissionAction, any]) => {
- return this.operationsService.jsonPatchByResourceType(
- this.submissionService.getSubmissionObjectLinkName(),
- action.payload.submissionId,
- 'sections').pipe(
+ withLatestFrom(this.submissionService.hasUnsavedModification()),
+ switchMap(([action, hasUnsavedModification]: [SaveAndDepositSubmissionAction, boolean]) => {
+ let response$: Observable;
+ if (hasUnsavedModification) {
+ response$ = this.operationsService.jsonPatchByResourceType(
+ this.submissionService.getSubmissionObjectLinkName(),
+ action.payload.submissionId,
+ 'sections') as Observable;
+ } else {
+ response$ = this.submissionObjectService.findById(action.payload.submissionId).pipe(
+ getFirstSucceededRemoteDataPayload(),
+ map((submissionObject: SubmissionObject) => [submissionObject])
+ );
+ }
+ return response$.pipe(
map((response: SubmissionObject[]) => {
if (this.canDeposit(response)) {
return new DepositSubmissionAction(action.payload.submissionId);
} else {
- this.notificationsService.warning(null, this.translate.get('submission.sections.general.sections_not_valid'));
- return this.parseSaveResponse((currentState.submission as SubmissionState).objects[action.payload.submissionId],
- response, action.payload.submissionId, currentState.forms);
+ return new SaveSubmissionFormSuccessAction(action.payload.submissionId, response);
}
}),
catchError(() => observableOf(new SaveSubmissionFormErrorAction(action.payload.submissionId))));