mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-11 20:13:07 +00:00
Added form validation before saving bitstream data
This commit is contained in:
@@ -236,6 +236,7 @@ describe('FormSectionComponent test suite', () => {
|
|||||||
|
|
||||||
it('should init section properly', () => {
|
it('should init section properly', () => {
|
||||||
const sectionData = {};
|
const sectionData = {};
|
||||||
|
formService.isValid.and.returnValue(observableOf(true));
|
||||||
formConfigService.getConfigByHref.and.returnValue(observableOf(formConfigData));
|
formConfigService.getConfigByHref.and.returnValue(observableOf(formConfigData));
|
||||||
sectionsServiceStub.getSectionData.and.returnValue(observableOf(sectionData));
|
sectionsServiceStub.getSectionData.and.returnValue(observableOf(sectionData));
|
||||||
spyOn(comp, 'initForm');
|
spyOn(comp, 'initForm');
|
||||||
|
@@ -35,6 +35,8 @@ import { POLICY_DEFAULT_WITH_LIST } from '../section-upload.component';
|
|||||||
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 { getMockSectionUploadService } from '../../../../shared/mocks/mock-section-upload.service';
|
import { getMockSectionUploadService } from '../../../../shared/mocks/mock-section-upload.service';
|
||||||
import { FormFieldMetadataValueObject } from '../../../../shared/form/builder/models/form-field-metadata-value.model';
|
import { FormFieldMetadataValueObject } from '../../../../shared/form/builder/models/form-field-metadata-value.model';
|
||||||
|
import { Group } from '../../../../core/eperson/models/group.model';
|
||||||
|
import { UploadSectionFileEditComponent } from './edit/file-edit.component';
|
||||||
|
|
||||||
function getMockFileService(): FileService {
|
function getMockFileService(): FileService {
|
||||||
return jasmine.createSpyObj('FileService', {
|
return jasmine.createSpyObj('FileService', {
|
||||||
@@ -61,7 +63,10 @@ describe('UploadSectionFileComponent test suite', () => {
|
|||||||
const sectionId = 'upload';
|
const sectionId = 'upload';
|
||||||
const collectionId = mockSubmissionCollectionId;
|
const collectionId = mockSubmissionCollectionId;
|
||||||
const availableAccessConditionOptions = mockUploadConfigResponse.accessConditionOptions;
|
const availableAccessConditionOptions = mockUploadConfigResponse.accessConditionOptions;
|
||||||
const availableGroupsMap = new Map([[mockGroup.id, { name: mockGroup.name, uuid: mockGroup.uuid }]]);
|
const availableGroupsMap: Map<string, Group[]> = new Map([
|
||||||
|
[mockUploadConfigResponse.accessConditionOptions[1].name, [mockGroup as any]],
|
||||||
|
[mockUploadConfigResponse.accessConditionOptions[2].name, [mockGroup as any]],
|
||||||
|
]);
|
||||||
const collectionPolicyType = POLICY_DEFAULT_WITH_LIST;
|
const collectionPolicyType = POLICY_DEFAULT_WITH_LIST;
|
||||||
const fileIndex = '0';
|
const fileIndex = '0';
|
||||||
const fileName = '123456-test-upload.jpg';
|
const fileName = '123456-test-upload.jpg';
|
||||||
@@ -98,7 +103,8 @@ describe('UploadSectionFileComponent test suite', () => {
|
|||||||
{ provide: SectionUploadService, useValue: getMockSectionUploadService() },
|
{ provide: SectionUploadService, useValue: getMockSectionUploadService() },
|
||||||
ChangeDetectorRef,
|
ChangeDetectorRef,
|
||||||
NgbModal,
|
NgbModal,
|
||||||
UploadSectionFileComponent
|
UploadSectionFileComponent,
|
||||||
|
UploadSectionFileEditComponent
|
||||||
],
|
],
|
||||||
schemas: [NO_ERRORS_SCHEMA]
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
}).compileComponents().then();
|
}).compileComponents().then();
|
||||||
@@ -228,10 +234,14 @@ describe('UploadSectionFileComponent test suite', () => {
|
|||||||
expect(fileService.downloadFile).toHaveBeenCalled()
|
expect(fileService.downloadFile).toHaveBeenCalled()
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should download Bitstream File properly', fakeAsync(() => {
|
it('should save Bitstream File data properly when form is valid', fakeAsync(() => {
|
||||||
|
compAsAny.fileEditComp = TestBed.get(UploadSectionFileEditComponent);
|
||||||
|
compAsAny.fileEditComp.formRef = {formGroup: null};
|
||||||
compAsAny.pathCombiner = pathCombiner;
|
compAsAny.pathCombiner = pathCombiner;
|
||||||
const event = new Event('click', null);
|
const event = new Event('click', null);
|
||||||
spyOn(comp, 'switchMode');
|
spyOn(comp, 'switchMode');
|
||||||
|
formService.validateAllFormFields.and.callFake(() => null);
|
||||||
|
formService.isValid.and.returnValue(observableOf(true));
|
||||||
formService.getFormData.and.returnValue(observableOf(mockFileFormData));
|
formService.getFormData.and.returnValue(observableOf(mockFileFormData));
|
||||||
|
|
||||||
const response = [
|
const response = [
|
||||||
@@ -279,6 +289,20 @@ describe('UploadSectionFileComponent test suite', () => {
|
|||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it('should not save Bitstream File data properly when form is not valid', fakeAsync(() => {
|
||||||
|
compAsAny.fileEditComp = TestBed.get(UploadSectionFileEditComponent);
|
||||||
|
compAsAny.fileEditComp.formRef = {formGroup: null};
|
||||||
|
compAsAny.pathCombiner = pathCombiner;
|
||||||
|
const event = new Event('click', null);
|
||||||
|
spyOn(comp, 'switchMode');
|
||||||
|
formService.validateAllFormFields.and.callFake(() => null);
|
||||||
|
formService.isValid.and.returnValue(observableOf(false));
|
||||||
|
|
||||||
|
expect(comp.switchMode).not.toHaveBeenCalled();
|
||||||
|
expect(uploadService.updateFileData).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
}));
|
||||||
|
|
||||||
it('should retrieve Value From Field properly', () => {
|
it('should retrieve Value From Field properly', () => {
|
||||||
let field;
|
let field;
|
||||||
expect(compAsAny.retrieveValueFromField(field)).toBeUndefined();
|
expect(compAsAny.retrieveValueFromField(field)).toBeUndefined();
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import { ChangeDetectorRef, Component, Input, OnChanges, OnInit } from '@angular/core';
|
import { ChangeDetectorRef, Component, Input, OnChanges, OnInit, ViewChild } from '@angular/core';
|
||||||
|
|
||||||
import { BehaviorSubject } from 'rxjs';
|
import { BehaviorSubject } from 'rxjs';
|
||||||
import { filter, first, flatMap } from 'rxjs/operators';
|
import { filter, first, flatMap, take } from 'rxjs/operators';
|
||||||
import { DynamicFormControlModel, } from '@ng-dynamic-forms/core';
|
import { DynamicFormControlModel, } from '@ng-dynamic-forms/core';
|
||||||
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
||||||
|
|
||||||
@@ -20,6 +20,8 @@ import { HALEndpointService } from '../../../../core/shared/hal-endpoint.service
|
|||||||
import { SubmissionJsonPatchOperationsService } from '../../../../core/submission/submission-json-patch-operations.service';
|
import { SubmissionJsonPatchOperationsService } from '../../../../core/submission/submission-json-patch-operations.service';
|
||||||
import { SubmissionObject } from '../../../../core/submission/models/submission-object.model';
|
import { SubmissionObject } from '../../../../core/submission/models/submission-object.model';
|
||||||
import { WorkspaceitemSectionUploadObject } from '../../../../core/submission/models/workspaceitem-section-upload.model';
|
import { WorkspaceitemSectionUploadObject } from '../../../../core/submission/models/workspaceitem-section-upload.model';
|
||||||
|
import { UploadSectionFileEditComponent } from './edit/file-edit.component';
|
||||||
|
import { Group } from '../../../../core/eperson/models/group.model';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ds-submission-upload-section-file',
|
selector: 'ds-submission-upload-section-file',
|
||||||
@@ -29,7 +31,7 @@ import { WorkspaceitemSectionUploadObject } from '../../../../core/submission/mo
|
|||||||
export class UploadSectionFileComponent implements OnChanges, OnInit {
|
export class UploadSectionFileComponent implements OnChanges, OnInit {
|
||||||
|
|
||||||
@Input() availableAccessConditionOptions: any[];
|
@Input() availableAccessConditionOptions: any[];
|
||||||
@Input() availableAccessConditionGroups: Map<string, any>;
|
@Input() availableAccessConditionGroups: Map<string, Group[]>;
|
||||||
@Input() collectionId;
|
@Input() collectionId;
|
||||||
@Input() collectionPolicyType;
|
@Input() collectionPolicyType;
|
||||||
@Input() configMetadataForm: SubmissionFormsModel;
|
@Input() configMetadataForm: SubmissionFormsModel;
|
||||||
@@ -48,6 +50,8 @@ export class UploadSectionFileComponent implements OnChanges, OnInit {
|
|||||||
protected pathCombiner: JsonPatchOperationPathCombiner;
|
protected pathCombiner: JsonPatchOperationPathCombiner;
|
||||||
protected subscriptions = [];
|
protected subscriptions = [];
|
||||||
|
|
||||||
|
@ViewChild(UploadSectionFileEditComponent) fileEditComp: UploadSectionFileEditComponent;
|
||||||
|
|
||||||
constructor(private cdr: ChangeDetectorRef,
|
constructor(private cdr: ChangeDetectorRef,
|
||||||
private fileService: FileService,
|
private fileService: FileService,
|
||||||
private formService: FormService,
|
private formService: FormService,
|
||||||
@@ -116,8 +120,12 @@ export class UploadSectionFileComponent implements OnChanges, OnInit {
|
|||||||
public saveBitstreamData(event) {
|
public saveBitstreamData(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
this.subscriptions.push(this.formService.getFormData(this.formId).pipe(
|
this.formService.validateAllFormFields(this.fileEditComp.formRef.formGroup);
|
||||||
first(),
|
this.subscriptions.push(this.formService.isValid(this.formId).pipe(
|
||||||
|
take(1),
|
||||||
|
filter((isValid) => isValid),
|
||||||
|
flatMap(() => this.formService.getFormData(this.formId)),
|
||||||
|
take(1),
|
||||||
flatMap((formData: any) => {
|
flatMap((formData: any) => {
|
||||||
Object.keys((formData.metadata))
|
Object.keys((formData.metadata))
|
||||||
.filter((key) => isNotEmpty(formData.metadata[key]))
|
.filter((key) => isNotEmpty(formData.metadata[key]))
|
||||||
|
Reference in New Issue
Block a user