From ac7c03870388c536ebe398fbbf9dfaeb145ee794 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 17 May 2021 19:28:01 +0200 Subject: [PATCH] Fix tests --- src/app/shared/mocks/form-service.mock.ts | 4 +- src/app/shared/mocks/submission.mock.ts | 156 ++++++++++++++++-- .../shared/testing/sections-service.stub.ts | 2 + .../form/submission-form.component.spec.ts | 1 + .../submission-upload-files.component.spec.ts | 4 +- .../submission-objects.effects.spec.ts | 56 +++++-- .../submission-objects.reducer.spec.ts | 5 +- ...sion-section-cc-licenses.component.spec.ts | 3 +- .../section-container.component.spec.ts | 9 +- .../form/section-form.component.spec.ts | 51 +++++- .../license/section-license.component.spec.ts | 3 +- .../sections/sections.service.spec.ts | 48 +++--- .../upload/section-upload.component.spec.ts | 3 +- src/app/submission/submission.service.spec.ts | 100 +++++++---- 14 files changed, 340 insertions(+), 105 deletions(-) diff --git a/src/app/shared/mocks/form-service.mock.ts b/src/app/shared/mocks/form-service.mock.ts index d0510f3a68..0475250627 100644 --- a/src/app/shared/mocks/form-service.mock.ts +++ b/src/app/shared/mocks/form-service.mock.ts @@ -17,7 +17,9 @@ export function getMockFormService( resetForm: {}, validateAllFormFields: jasmine.createSpy('validateAllFormFields'), isValid: jasmine.createSpy('isValid'), - isFormInitialized: observableOf(true) + isFormInitialized: observableOf(true), + addError: jasmine.createSpy('addError'), + removeError: jasmine.createSpy('removeError'), }); } diff --git a/src/app/shared/mocks/submission.mock.ts b/src/app/shared/mocks/submission.mock.ts index eaebb38df8..04461598ce 100644 --- a/src/app/shared/mocks/submission.mock.ts +++ b/src/app/shared/mocks/submission.mock.ts @@ -60,7 +60,7 @@ export const mockSectionsErrors = [ } ]; -export const mockSectionsErrorsTwo = [ +export const mockSectionsErrorsTouchedField = [ { message: 'error.validation.required', paths: [ @@ -1020,7 +1020,127 @@ export const mockSubmissionState: SubmissionObjectState = Object.assign({}, { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + isLoading: false, + isValid: false, + removePending: false + } as any, + 'collection': { + config: '', + mandatory: true, + sectionType: 'collection', + visibility: { + main: 'HIDDEN', + other: 'HIDDEN' + }, + collapsed: false, + enabled: true, + data: {}, + errorsToShow: [], + isLoading: false, + isValid: false, + removePending: false + } as any, + 'traditionalpageone': { + header: 'submit.progressbar.describe.stepone', + config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/traditionalpageone', + mandatory: true, + sectionType: 'submission-form', + collapsed: false, + enabled: true, + data: {}, + errorsToShow: [], + formId: '2_traditionalpageone', + isLoading: false, + isValid: false, + removePending: false + } as any, + 'traditionalpagetwo': { + header: 'submit.progressbar.describe.steptwo', + config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/traditionalpagetwo', + mandatory: false, + sectionType: 'submission-form', + collapsed: false, + enabled: false, + data: {}, + errorsToShow: [], + isLoading: false, + isValid: false, + removePending: false + } as any, + 'detect-duplicate': { + header: 'submit.progressbar.detect-duplicate', + config: '', + mandatory: true, + sectionType: 'detect-duplicate', + collapsed: false, + enabled: true, + data: { + matches: {} + }, + errorsToShow: [], + isLoading: false, + isValid: false, + removePending: false + } as any, + 'upload': { + header: 'submit.progressbar.upload', + config: 'https://rest.api/dspace-spring-rest/api/config/submissionuploads/upload', + mandatory: true, + sectionType: 'upload', + collapsed: false, + enabled: true, + data: { + files: [] + }, + errorsToShow: [], + isLoading: false, + isValid: false, + removePending: false + } as any, + 'license': { + header: 'submit.progressbar.license', + config: '', + mandatory: true, + sectionType: 'license', + visibility: { + main: null, + other: 'READONLY' + }, + collapsed: false, + enabled: true, + data: {}, + errorsToShow: [], + isLoading: false, + isValid: false, + removePending: false + } as any + }, + isLoading: false, + savePending: false, + depositPending: false + } +}); + +export const mockSubmissionStateWithDuplicate: SubmissionObjectState = Object.assign({}, { + 826: { + collection: mockSubmissionCollectionId, + definition: 'traditional', + selfUrl: mockSubmissionSelfUrl, + activeSection: null, + sections: { + 'extraction': { + config: '', + mandatory: true, + sectionType: 'utils', + visibility: { + main: 'HIDDEN', + other: 'HIDDEN' + }, + collapsed: false, + enabled: true, + data: {}, + errorsToShow: [], isLoading: false, isValid: false } as any, @@ -1035,7 +1155,7 @@ export const mockSubmissionState: SubmissionObjectState = Object.assign({}, { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any, @@ -1047,7 +1167,7 @@ export const mockSubmissionState: SubmissionObjectState = Object.assign({}, { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], formId: '2_traditionalpageone', isLoading: false, isValid: false @@ -1060,7 +1180,7 @@ export const mockSubmissionState: SubmissionObjectState = Object.assign({}, { collapsed: false, enabled: false, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any, @@ -1074,7 +1194,7 @@ export const mockSubmissionState: SubmissionObjectState = Object.assign({}, { data: { files: [] }, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any, @@ -1090,7 +1210,7 @@ export const mockSubmissionState: SubmissionObjectState = Object.assign({}, { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any @@ -1119,7 +1239,7 @@ export const mockSubmissionStateWithoutUpload: SubmissionObjectState = Object.as collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any, @@ -1134,7 +1254,7 @@ export const mockSubmissionStateWithoutUpload: SubmissionObjectState = Object.as collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any, @@ -1146,7 +1266,7 @@ export const mockSubmissionStateWithoutUpload: SubmissionObjectState = Object.as collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], formId: '2_traditionalpageone', isLoading: false, isValid: false @@ -1159,7 +1279,7 @@ export const mockSubmissionStateWithoutUpload: SubmissionObjectState = Object.as collapsed: false, enabled: false, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any, @@ -1175,7 +1295,7 @@ export const mockSubmissionStateWithoutUpload: SubmissionObjectState = Object.as collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any @@ -1198,7 +1318,7 @@ export const mockSectionsState = Object.assign({}, { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any, @@ -1213,7 +1333,7 @@ export const mockSectionsState = Object.assign({}, { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any, @@ -1225,7 +1345,7 @@ export const mockSectionsState = Object.assign({}, { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any, @@ -1237,7 +1357,7 @@ export const mockSectionsState = Object.assign({}, { collapsed: false, enabled: false, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any, @@ -1249,7 +1369,7 @@ export const mockSectionsState = Object.assign({}, { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any, @@ -1265,7 +1385,7 @@ export const mockSectionsState = Object.assign({}, { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], isLoading: false, isValid: false } as any diff --git a/src/app/shared/testing/sections-service.stub.ts b/src/app/shared/testing/sections-service.stub.ts index 3b311c5e19..f6296dad74 100644 --- a/src/app/shared/testing/sections-service.stub.ts +++ b/src/app/shared/testing/sections-service.stub.ts @@ -16,4 +16,6 @@ export class SectionsServiceStub { setSectionError = jasmine.createSpy('setSectionError'); setSectionStatus = jasmine.createSpy('setSectionStatus'); computeSectionConfiguredMetadata = jasmine.createSpy('computeSectionConfiguredMetadata'); + getShownSectionErrors = jasmine.createSpy('getShownSectionErrors'); + getSectionServerErrors = jasmine.createSpy('getSectionServerErrors'); } diff --git a/src/app/submission/form/submission-form.component.spec.ts b/src/app/submission/form/submission-form.component.spec.ts index dd8e6d0ea3..bd504e09c1 100644 --- a/src/app/submission/form/submission-form.component.spec.ts +++ b/src/app/submission/form/submission-form.component.spec.ts @@ -126,6 +126,7 @@ describe('SubmissionFormComponent Component', () => { comp.submissionDefinition = submissionDefinition; comp.selfUrl = selfUrl; comp.sections = sectionsData; + comp.submissionErrors = null; comp.item = new Item(); submissionServiceStub.getSubmissionObject.and.returnValue(observableOf(submissionState)); diff --git a/src/app/submission/form/submission-upload-files/submission-upload-files.component.spec.ts b/src/app/submission/form/submission-upload-files/submission-upload-files.component.spec.ts index 4a943276e5..bbee3b017c 100644 --- a/src/app/submission/form/submission-upload-files/submission-upload-files.component.spec.ts +++ b/src/app/submission/form/submission-upload-files/submission-upload-files.component.spec.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { waitForAsync, ComponentFixture, inject, TestBed } from '@angular/core/testing'; +import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; import { of as observableOf } from 'rxjs'; import { TranslateModule, TranslateService } from '@ngx-translate/core'; @@ -162,6 +162,7 @@ describe('SubmissionUploadFilesComponent Component', () => { submissionId, sectionId, mockSectionsData[sectionId], + expectedErrors[sectionId], expectedErrors[sectionId] ); }); @@ -188,6 +189,7 @@ describe('SubmissionUploadFilesComponent Component', () => { submissionId, sectionId, mockSectionsData[sectionId], + expectedErrors[sectionId], expectedErrors[sectionId] ); }); diff --git a/src/app/submission/objects/submission-objects.effects.spec.ts b/src/app/submission/objects/submission-objects.effects.spec.ts index 3ed4a4450d..122ebd90ac 100644 --- a/src/app/submission/objects/submission-objects.effects.spec.ts +++ b/src/app/submission/objects/submission-objects.effects.spec.ts @@ -28,7 +28,7 @@ import { mockSectionsData, mockSectionsDataTwo, mockSectionsErrors, - mockSectionsErrorsTwo, + mockSectionsErrorsTouchedField, mockSubmissionCollectionId, mockSubmissionDefinition, mockSubmissionDefinitionResponse, @@ -358,18 +358,21 @@ describe('SubmissionObjectEffects test suite', () => { submissionId, 'traditionalpageone', mockSectionsData.traditionalpageone as any, + errorsList.traditionalpageone || [], errorsList.traditionalpageone || [] ), c: new UpdateSectionDataAction( submissionId, 'license', mockSectionsData.license as any, + errorsList.license || [], errorsList.license || [] ), d: new UpdateSectionDataAction( submissionId, 'upload', mockSectionsData.upload as any, + errorsList.upload || [], errorsList.upload || [] ), }); @@ -408,25 +411,29 @@ describe('SubmissionObjectEffects test suite', () => { } }); - const errorsList = parseSectionErrors(mockSectionsErrorsTwo); + const errorsToShowList = parseSectionErrors(mockSectionsErrorsTouchedField); + const serverValidationErrorsList = parseSectionErrors(mockSectionsErrors); const expected = cold('--(bcd)-', { b: new UpdateSectionDataAction( submissionId, 'traditionalpageone', mockSectionsData.traditionalpageone as any, - errorsList.traditionalpageone + errorsToShowList.traditionalpageone, + serverValidationErrorsList.traditionalpageone ), c: new UpdateSectionDataAction( submissionId, 'license', mockSectionsData.license as any, - errorsList.license || [] + errorsToShowList.license || [], + serverValidationErrorsList.license || [] ), d: new UpdateSectionDataAction( submissionId, 'upload', mockSectionsData.upload as any, - errorsList.upload || [] + errorsToShowList.upload || [], + serverValidationErrorsList.upload || [] ), }); @@ -459,18 +466,21 @@ describe('SubmissionObjectEffects test suite', () => { submissionId, 'traditionalpageone', mockSectionsData.traditionalpageone as any, + [], [] ), c: new UpdateSectionDataAction( submissionId, 'license', mockSectionsData.license as any, + [], [] ), d: new UpdateSectionDataAction( submissionId, 'upload', mockSectionsData.upload as any, + [], [] ), }); @@ -506,18 +516,21 @@ describe('SubmissionObjectEffects test suite', () => { submissionId, 'traditionalpageone', mockSectionsData.traditionalpageone as any, + errorsList.traditionalpageone || [], errorsList.traditionalpageone || [] ), c: new UpdateSectionDataAction( submissionId, 'license', mockSectionsData.license as any, + errorsList.license || [], errorsList.license || [] ), d: new UpdateSectionDataAction( submissionId, 'upload', mockSectionsData.upload as any, + errorsList.upload || [], errorsList.upload || [] ), }); @@ -553,24 +566,28 @@ describe('SubmissionObjectEffects test suite', () => { submissionId, 'traditionalpageone', mockSectionsDataTwo.traditionalpageone as any, + errorsList.traditionalpageone || [], errorsList.traditionalpageone || [] ), c: new UpdateSectionDataAction( submissionId, 'traditionalpagetwo', mockSectionsDataTwo.traditionalpagetwo as any, + errorsList.traditionalpagetwo || [], errorsList.traditionalpagetwo || [] ), d: new UpdateSectionDataAction( submissionId, 'license', mockSectionsDataTwo.license as any, + errorsList.license || [], errorsList.license || [] ), e: new UpdateSectionDataAction( submissionId, 'upload', mockSectionsDataTwo.upload as any, + errorsList.upload || [], errorsList.upload || [] ), }); @@ -610,18 +627,21 @@ describe('SubmissionObjectEffects test suite', () => { submissionId, 'traditionalpageone', mockSectionsData.traditionalpageone as any, - [] + [], + errorsList.traditionalpageone ), c: new UpdateSectionDataAction( submissionId, 'license', mockSectionsData.license as any, + errorsList.license || [], errorsList.license || [] ), d: new UpdateSectionDataAction( submissionId, 'upload', mockSectionsData.upload as any, + errorsList.upload || [], errorsList.upload || [] ), }); @@ -655,18 +675,21 @@ describe('SubmissionObjectEffects test suite', () => { submissionId, 'traditionalpageone', mockSectionsData.traditionalpageone as any, + [], [] ), c: new UpdateSectionDataAction( submissionId, 'license', mockSectionsData.license as any, + [], [] ), d: new UpdateSectionDataAction( submissionId, 'upload', mockSectionsData.upload as any, + [], [] ), }); @@ -696,26 +719,28 @@ describe('SubmissionObjectEffects test suite', () => { } }); - const errorsList = parseSectionErrors(mockSectionsErrors); - console.log(errorsList); + const serverValidationErrorsList = parseSectionErrors(mockSectionsErrors); const expected = cold('--(bcd)-', { b: new UpdateSectionDataAction( submissionId, 'traditionalpageone', mockSectionsData.traditionalpageone as any, - [] + [], + serverValidationErrorsList.traditionalpageone ), c: new UpdateSectionDataAction( submissionId, 'license', mockSectionsData.license as any, - errorsList.license || [] + serverValidationErrorsList.license || [], + serverValidationErrorsList.license || [] ), d: new UpdateSectionDataAction( submissionId, 'upload', mockSectionsData.upload as any, - errorsList.upload || [] + serverValidationErrorsList.upload || [], + serverValidationErrorsList.upload || [] ), }); @@ -750,24 +775,28 @@ describe('SubmissionObjectEffects test suite', () => { submissionId, 'traditionalpageone', mockSectionsDataTwo.traditionalpageone as any, - [] + [], + errorsList.traditionalpageone ), c: new UpdateSectionDataAction( submissionId, 'traditionalpagetwo', mockSectionsDataTwo.traditionalpagetwo as any, + errorsList.traditionalpagetwo || [], errorsList.traditionalpagetwo || [] ), d: new UpdateSectionDataAction( submissionId, 'license', mockSectionsDataTwo.license as any, + errorsList.license || [], errorsList.license || [] ), e: new UpdateSectionDataAction( submissionId, 'upload', mockSectionsDataTwo.upload as any, + errorsList.upload || [], errorsList.upload || [] ), }); @@ -880,18 +909,21 @@ describe('SubmissionObjectEffects test suite', () => { 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 || [] ) ] diff --git a/src/app/submission/objects/submission-objects.reducer.spec.ts b/src/app/submission/objects/submission-objects.reducer.spec.ts index 38fd5f9c6d..2a24afae19 100644 --- a/src/app/submission/objects/submission-objects.reducer.spec.ts +++ b/src/app/submission/objects/submission-objects.reducer.spec.ts @@ -238,9 +238,10 @@ describe('submissionReducer test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, - isValid: false + isValid: true } as any; let action: any = new InitSubmissionFormAction(collectionId, submissionId, selfUrl, submissionDefinition, {}, new Item(), null); diff --git a/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.spec.ts b/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.spec.ts index 415e7a5be8..3757ca87b8 100644 --- a/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.spec.ts +++ b/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.spec.ts @@ -27,7 +27,8 @@ describe('SubmissionSectionCcLicensesComponent', () => { config: 'test config', mandatory: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], header: 'test header', id: 'test section id', sectionType: SectionsType.SubmissionForm diff --git a/src/app/submission/sections/container/section-container.component.spec.ts b/src/app/submission/sections/container/section-container.component.spec.ts index 324582c0c9..7568b17ea7 100644 --- a/src/app/submission/sections/container/section-container.component.spec.ts +++ b/src/app/submission/sections/container/section-container.component.spec.ts @@ -22,11 +22,12 @@ const sectionState = { header: 'submit.progressbar.describe.stepone', config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/traditionalpageone', mandatory: true, - sectionType: 'submission-form', + sectionType: SectionsType.SubmissionForm, collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false } as any; @@ -35,7 +36,8 @@ const sectionObject: SectionDataObject = { config: 'https://dspace7.4science.it/or2018/api/config/submissionforms/traditionalpageone', mandatory: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], header: 'submit.progressbar.describe.stepone', id: 'traditionalpageone', sectionType: SectionsType.SubmissionForm @@ -56,6 +58,7 @@ describe('SubmissionSectionContainerComponent test suite', () => { function init() { sectionsServiceStub.isSectionValid.and.returnValue(observableOf(true)); sectionsServiceStub.getSectionState.and.returnValue(observableOf(sectionState)); + sectionsServiceStub.getShownSectionErrors.and.returnValue(observableOf([])); submissionServiceStub.getActiveSectionId.and.returnValue(observableOf('traditionalpageone')); } diff --git a/src/app/submission/sections/form/section-form.component.spec.ts b/src/app/submission/sections/form/section-form.component.spec.ts index 126f7ac3f7..90861bce5e 100644 --- a/src/app/submission/sections/form/section-form.component.spec.ts +++ b/src/app/submission/sections/form/section-form.component.spec.ts @@ -44,6 +44,7 @@ import { SubmissionObjectDataService } from '../../../core/submission/submission import { ObjectCacheService } from '../../../core/cache/object-cache.service'; import { RequestService } from '../../../core/data/request.service'; import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; +import { cold } from 'jasmine-marbles'; function getMockSubmissionFormsConfigService(): SubmissionFormsConfigService { return jasmine.createSpyObj('FormOperationsService', { @@ -59,7 +60,8 @@ const sectionObject: SectionDataObject = { config: 'https://dspace7.4science.it/or2018/api/config/submissionforms/traditionalpageone', mandatory: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], header: 'submit.progressbar.describe.stepone', id: 'traditionalpageone', sectionType: SectionsType.SubmissionForm @@ -200,6 +202,7 @@ describe('SubmissionSectionformComponent test suite', () => { formService.isValid.and.returnValue(observableOf(true)); formConfigService.findByHref.and.returnValue(observableOf(testFormConfiguration)); sectionsServiceStub.getSectionData.and.returnValue(observableOf(sectionData)); + sectionsServiceStub.getSectionServerErrors.and.returnValue(observableOf([])); const html = ` `; @@ -246,6 +249,7 @@ describe('SubmissionSectionformComponent test suite', () => { formService.isValid.and.returnValue(observableOf(true)); formConfigService.findByHref.and.returnValue(createSuccessfulRemoteDataObject$(testFormConfiguration)); sectionsServiceStub.getSectionData.and.returnValue(observableOf(sectionData)); + sectionsServiceStub.getSectionServerErrors.and.returnValue(observableOf([])); spyOn(comp, 'initForm'); spyOn(comp, 'subscriptions'); @@ -253,7 +257,7 @@ describe('SubmissionSectionformComponent test suite', () => { fixture.detectChanges(); expect(compAsAny.formConfig).toEqual(testFormConfiguration); - expect(comp.sectionData.errors).toEqual([]); + expect(comp.sectionData.errorsToShow).toEqual([]); expect(comp.sectionData.data).toEqual(sectionData); expect(comp.isLoading).toBeFalsy(); expect(comp.initForm).toHaveBeenCalledWith(sectionData); @@ -322,7 +326,7 @@ describe('SubmissionSectionformComponent test suite', () => { }; const sectionError = []; comp.sectionData.data = {}; - comp.sectionData.errors = []; + comp.sectionData.errorsToShow = []; compAsAny.formData = {}; compAsAny.sectionMetadata = ['dc.title']; @@ -342,7 +346,7 @@ describe('SubmissionSectionformComponent test suite', () => { 'dc.title': [new FormFieldMetadataValueObject('test')] }; comp.sectionData.data = {}; - comp.sectionData.errors = []; + comp.sectionData.errorsToShow = []; compAsAny.formData = sectionData; compAsAny.sectionMetadata = ['dc.title']; @@ -368,7 +372,8 @@ describe('SubmissionSectionformComponent test suite', () => { it('should check for error', () => { comp.isUpdating = false; comp.formId = 'test'; - comp.sectionData.errors = []; + comp.sectionData.errorsToShow = []; + comp.sectionData.serverValidationErrors = []; comp.checksForErrors(parsedSectionErrors); @@ -379,7 +384,37 @@ describe('SubmissionSectionformComponent test suite', () => { parsedSectionErrors, [] ); - expect(comp.sectionData.errors).toEqual(parsedSectionErrors); + expect(comp.sectionData.errorsToShow).toEqual(parsedSectionErrors); + }); + + it('should return a valid status when form is valid and there are no server validation errors', () => { + formService.isValid.and.returnValue(observableOf(true)); + sectionsServiceStub.getSectionServerErrors.and.returnValue(observableOf([])); + const expected = cold('(b|)', { + b: true + }); + + expect(compAsAny.getSectionStatus()).toBeObservable(expected); + }); + + it('should return an invalid status when form is valid and there are server validation errors', () => { + formService.isValid.and.returnValue(observableOf(true)); + sectionsServiceStub.getSectionServerErrors.and.returnValue(observableOf(parsedSectionErrors)); + const expected = cold('(b|)', { + b: false + }); + + expect(compAsAny.getSectionStatus()).toBeObservable(expected); + }); + + it('should return an invalid status when form is not valid and there are no server validation errors', () => { + formService.isValid.and.returnValue(observableOf(false)); + sectionsServiceStub.getSectionServerErrors.and.returnValue(observableOf([])); + const expected = cold('(b|)', { + b: false + }); + + expect(compAsAny.getSectionStatus()).toBeObservable(expected); }); it('should subscribe to state properly', () => { @@ -392,7 +427,7 @@ describe('SubmissionSectionformComponent test suite', () => { }; const sectionState = { data: sectionData, - errors: parsedSectionErrors + errorsToShow: parsedSectionErrors }; formService.getFormData.and.returnValue(observableOf(formData)); @@ -402,7 +437,7 @@ describe('SubmissionSectionformComponent test suite', () => { expect(compAsAny.subs.length).toBe(2); expect(compAsAny.formData).toEqual(formData); - expect(comp.updateForm).toHaveBeenCalledWith(sectionState.data, sectionState.errors); + expect(comp.updateForm).toHaveBeenCalledWith(sectionState.data, sectionState.errorsToShow); }); diff --git a/src/app/submission/sections/license/section-license.component.spec.ts b/src/app/submission/sections/license/section-license.component.spec.ts index 1dd9f36fe5..f7a3895052 100644 --- a/src/app/submission/sections/license/section-license.component.spec.ts +++ b/src/app/submission/sections/license/section-license.component.spec.ts @@ -70,7 +70,8 @@ const sectionObject: SectionDataObject = { acceptanceDate: null, granted: false }, - errors: [], + errorsToShow: [], + serverValidationErrors: [], header: 'submit.progressbar.describe.license', id: 'license', sectionType: SectionsType.License diff --git a/src/app/submission/sections/sections.service.spec.ts b/src/app/submission/sections/sections.service.spec.ts index 0d63beeaea..1e32969e59 100644 --- a/src/app/submission/sections/sections.service.spec.ts +++ b/src/app/submission/sections/sections.service.spec.ts @@ -28,13 +28,15 @@ import { SectionStatusChangeAction, UpdateSectionDataAction } from '../objects/submission-objects.actions'; -import { FormAddError, FormClearErrorsAction, FormRemoveErrorAction } from '../../shared/form/form.actions'; +import { FormClearErrorsAction } from '../../shared/form/form.actions'; import parseSectionErrors from '../utils/parseSectionErrors'; import { SubmissionScopeType } from '../../core/submission/submission-scope-type'; import { SubmissionSectionError } from '../objects/submission-objects.reducer'; import { getMockScrollToService } from '../../shared/mocks/scroll-to-service.mock'; import { storeModuleConfig } from '../../app.reducer'; import { SectionsType } from './sections-type'; +import { FormService } from '../../shared/form/form.service'; +import { getMockFormService } from '../../shared/mocks/form-service.mock'; describe('SectionsService test suite', () => { let notificationsServiceStub: NotificationsServiceStub; @@ -57,6 +59,8 @@ describe('SectionsService test suite', () => { select: jasmine.createSpy('select') }); + const formService: any = getMockFormService(); + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ @@ -74,6 +78,7 @@ describe('SectionsService test suite', () => { { provide: SubmissionService, useClass: SubmissionServiceStub }, { provide: TranslateService, useValue: getMockTranslateService() }, { provide: Store, useValue: store }, + { provide: FormService, useValue: formService }, SectionsService ] }).compileComponents(); @@ -98,22 +103,23 @@ describe('SectionsService test suite', () => { it('should dispatch a new FormAddError for each section\'s error', () => { service.checkSectionErrors(submissionId, sectionId, formId, sectionErrors[sectionId]); - expect(store.dispatch).toHaveBeenCalledWith(new FormAddError( + expect(formService.addError).toHaveBeenCalledWith( formId, - 'dc_contributor_author', + 'dc.contributor.author', 0, - 'error.validation.required')); + 'error.validation.required'); - expect(store.dispatch).toHaveBeenCalledWith(new FormAddError( + expect(formService.addError).toHaveBeenCalledWith( formId, - 'dc_title', + 'dc.title', 0, - 'error.validation.required')); + 'error.validation.required'); - expect(store.dispatch).toHaveBeenCalledWith(new FormAddError(formId, - 'dc_date_issued', + expect(formService.addError).toHaveBeenCalledWith( + formId, + 'dc.date.issued', 0, - 'error.validation.required')); + 'error.validation.required'); }); it('should dispatch a new FormRemoveErrorAction for each section\'s error that no longer exists', () => { @@ -123,21 +129,21 @@ describe('SectionsService test suite', () => { service.checkSectionErrors(submissionId, sectionId, formId, currentErrors, prevErrors); - expect(store.dispatch).toHaveBeenCalledWith(new FormAddError( + expect(formService.addError).toHaveBeenCalledWith( formId, - 'dc_contributor_author', + 'dc.contributor.author', 0, - 'error.validation.required')); + 'error.validation.required'); - expect(store.dispatch).toHaveBeenCalledWith(new FormAddError( + expect(formService.addError).toHaveBeenCalledWith( formId, - 'dc_title', + 'dc.title', 0, - 'error.validation.required')); - expect(store.dispatch).toHaveBeenCalledWith(new FormRemoveErrorAction( + 'error.validation.required'); + expect(formService.removeError).toHaveBeenCalledWith( formId, - 'dc_date_issued', - 0)); + 'dc.date.issued', + 0); }); }); @@ -385,7 +391,7 @@ describe('SectionsService test suite', () => { scheduler.schedule(() => service.updateSectionData(submissionId, sectionId, data, [])); scheduler.flush(); - expect(store.dispatch).toHaveBeenCalledWith(new UpdateSectionDataAction(submissionId, sectionId, data, [])); + expect(store.dispatch).toHaveBeenCalledWith(new UpdateSectionDataAction(submissionId, sectionId, data, [], [])); }); it('should dispatch a new UpdateSectionDataAction and display a new notification when section is not enabled', () => { @@ -397,7 +403,7 @@ describe('SectionsService test suite', () => { scheduler.schedule(() => service.updateSectionData(submissionId, sectionId, data, [])); scheduler.flush(); - expect(store.dispatch).toHaveBeenCalledWith(new UpdateSectionDataAction(submissionId, sectionId, data, [])); + expect(store.dispatch).toHaveBeenCalledWith(new UpdateSectionDataAction(submissionId, sectionId, data, [], [])); }); }); diff --git a/src/app/submission/sections/upload/section-upload.component.spec.ts b/src/app/submission/sections/upload/section-upload.component.spec.ts index fad5026dca..214b1134d3 100644 --- a/src/app/submission/sections/upload/section-upload.component.spec.ts +++ b/src/app/submission/sections/upload/section-upload.component.spec.ts @@ -98,7 +98,8 @@ describe('SubmissionSectionUploadComponent test suite', () => { data: { files: [] }, - errors: [], + errorsToShow: [], + serverValidationErrors: [], header: 'submit.progressbar.describe.upload', id: 'upload-id', sectionType: SectionsType.Upload diff --git a/src/app/submission/submission.service.spec.ts b/src/app/submission/submission.service.spec.ts index ccf46a0c38..1e2be5b612 100644 --- a/src/app/submission/submission.service.spec.ts +++ b/src/app/submission/submission.service.spec.ts @@ -1,5 +1,5 @@ import { StoreModule } from '@ngrx/store'; -import { waitForAsync, fakeAsync, flush, TestBed, tick } from '@angular/core/testing'; +import { fakeAsync, flush, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute, Router } from '@angular/router'; import { HttpHeaders } from '@angular/common/http'; @@ -32,9 +32,7 @@ import { SaveSubmissionSectionFormAction, SetActiveSectionAction } from './objects/submission-objects.actions'; -import { - createFailedRemoteDataObject, -} from '../shared/remote-data.utils'; +import { createFailedRemoteDataObject, } from '../shared/remote-data.utils'; import { getMockSearchService } from '../shared/mocks/search-service.mock'; import { getMockRequestService } from '../shared/mocks/request.service.mock'; import { RequestService } from '../core/data/request.service'; @@ -68,7 +66,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -83,7 +82,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -95,7 +95,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -107,7 +108,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: false, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -119,7 +121,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: true }, @@ -131,7 +134,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: false, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -143,7 +147,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: false, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -155,7 +160,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: false, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -167,7 +173,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -183,7 +190,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false } @@ -213,7 +221,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -228,7 +237,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -240,7 +250,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: true }, @@ -252,7 +263,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: false, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -264,7 +276,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: true }, @@ -276,7 +289,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: false, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -288,7 +302,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: false, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -300,7 +315,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: false, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }, @@ -312,7 +328,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: true }, @@ -328,7 +345,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: true } @@ -452,7 +470,7 @@ describe('SubmissionService test suite', () => { submissionDefinition, {}, new Item(), - [] + null ); const expected = new InitSubmissionFormAction( collectionId, @@ -461,7 +479,7 @@ describe('SubmissionService test suite', () => { submissionDefinition, {}, new Item(), - []); + null); expect((service as any).store.dispatch).toHaveBeenCalledWith(expected); }); @@ -564,7 +582,8 @@ describe('SubmissionService test suite', () => { mandatory: true, sectionType: 'submission-form', data: {}, - errors: [] + errorsToShow: [], + serverValidationErrors: [] }, { header: 'submit.progressbar.describe.indexing', @@ -573,7 +592,8 @@ describe('SubmissionService test suite', () => { mandatory: false, sectionType: 'submission-form', data: {}, - errors: [] + errorsToShow: [], + serverValidationErrors: [] }, { header: 'submit.progressbar.describe.publicationchannel', @@ -582,7 +602,8 @@ describe('SubmissionService test suite', () => { mandatory: true, sectionType: 'submission-form', data: {}, - errors: [] + errorsToShow: [], + serverValidationErrors: [] }, { header: 'submit.progressbar.describe.acknowledgement', @@ -591,7 +612,8 @@ describe('SubmissionService test suite', () => { mandatory: false, sectionType: 'submission-form', data: {}, - errors: [] + errorsToShow: [], + serverValidationErrors: [] }, { header: 'submit.progressbar.describe.identifiers', @@ -600,7 +622,8 @@ describe('SubmissionService test suite', () => { mandatory: false, sectionType: 'submission-form', data: {}, - errors: [] + errorsToShow: [], + serverValidationErrors: [] }, { header: 'submit.progressbar.describe.references', @@ -609,7 +632,8 @@ describe('SubmissionService test suite', () => { mandatory: false, sectionType: 'submission-form', data: {}, - errors: [] + errorsToShow: [], + serverValidationErrors: [] }, { header: 'submit.progressbar.upload', @@ -618,7 +642,8 @@ describe('SubmissionService test suite', () => { mandatory: true, sectionType: 'upload', data: {}, - errors: [] + errorsToShow: [], + serverValidationErrors: [] }, { header: 'submit.progressbar.license', @@ -627,7 +652,8 @@ describe('SubmissionService test suite', () => { mandatory: true, sectionType: 'license', data: {}, - errors: [] + errorsToShow: [], + serverValidationErrors: [] } ] }); @@ -781,7 +807,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false }; @@ -795,7 +822,8 @@ describe('SubmissionService test suite', () => { collapsed: false, enabled: true, data: {}, - errors: [], + errorsToShow: [], + serverValidationErrors: [], isLoading: false, isValid: false };