[CST-12043] unit tests

This commit is contained in:
Vlad Nouski
2023-10-23 18:34:13 +02:00
parent ffdeca69f4
commit bbc8b6ac8a
12 changed files with 207 additions and 128 deletions

View File

@@ -47,6 +47,7 @@ import {
} from '../../../../../core/json-patch/builder/json-patch-operation-path-combiner';
import { dateToISOFormat } from '../../../../../shared/date.util';
import { of } from 'rxjs';
import { DynamicCustomSwitchModel } from '../../../../../shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.model';
const jsonPatchOpBuilder: any = jasmine.createSpyObj('jsonPatchOpBuilder', {
add: jasmine.createSpy('add'),
@@ -78,7 +79,7 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => {
const fileIndex = '0';
const fileId = '123456-test-upload';
const fileData: any = mockUploadFiles[0];
const pathCombiner = new JsonPatchOperationPathCombiner('sections', sectionId, 'files', fileIndex);
const pathCombiner = new JsonPatchOperationPathCombiner('sections', sectionId);
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
@@ -183,11 +184,15 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => {
comp.ngOnInit();
const models = [DynamicCustomSwitchModel, DynamicFormGroupModel, DynamicFormArrayModel];
expect(comp.formModel).toBeDefined();
expect(comp.formModel.length).toBe(2);
expect(comp.formModel[0] instanceof DynamicFormGroupModel).toBeTruthy();
expect(comp.formModel[1] instanceof DynamicFormArrayModel).toBeTruthy();
expect((comp.formModel[1] as DynamicFormArrayModel).groups.length).toBe(2);
expect(comp.formModel.length).toBe(models.length);
models.forEach((model, i) => {
expect(comp.formModel[i] instanceof model).toBeTruthy();
});
expect((comp.formModel[2] as DynamicFormArrayModel).groups.length).toBe(2);
const startDateModel = formbuilderService.findById('startDate', comp.formModel);
expect(startDateModel.max).toEqual(maxStartDate);
const endDateModel = formbuilderService.findById('endDate', comp.formModel);
@@ -251,6 +256,7 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => {
compAsAny.formRef = {formGroup: null};
compAsAny.fileData = fileData;
compAsAny.pathCombiner = pathCombiner;
compAsAny.isPrimary = null;
formService.validateAllFormFields.and.callFake(() => null);
formService.isValid.and.returnValue(of(true));
formService.getFormData.and.returnValue(of(mockFileFormData));
@@ -259,6 +265,7 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => {
Object.assign(mockSubmissionObject, {
sections: {
upload: {
primary: true,
files: mockUploadFiles
}
}
@@ -274,23 +281,28 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => {
comp.saveBitstreamData();
tick();
let path = 'metadata/dc.title';
let path = 'primary';
expect(uploadService.updatePrimaryBitstreamOperation).toHaveBeenCalledWith(pathCombiner.getPath(path), compAsAny.isPrimary, mockFileFormData.primary[0], compAsAny.fileId);
const pathFragment = ['files', fileIndex];
path = 'metadata/dc.title';
expect(operationsBuilder.add).toHaveBeenCalledWith(
pathCombiner.getPath(path),
pathCombiner.getPath([...pathFragment, path]),
mockFileFormData.metadata['dc.title'],
true
);
path = 'metadata/dc.description';
expect(operationsBuilder.add).toHaveBeenCalledWith(
pathCombiner.getPath(path),
pathCombiner.getPath([...pathFragment, path]),
mockFileFormData.metadata['dc.description'],
true
);
path = 'accessConditions';
expect(operationsBuilder.add).toHaveBeenCalledWith(
pathCombiner.getPath(path),
pathCombiner.getPath([...pathFragment, path]),
accessConditionsToSave,
true
);

View File

@@ -29,7 +29,6 @@ import {
BITSTREAM_FORM_ACCESS_CONDITION_TYPE_CONFIG,
BITSTREAM_FORM_ACCESS_CONDITION_TYPE_LAYOUT,
BITSTREAM_FORM_PRIMARY,
BITSTREAM_FORM_PRIMARY_LAYOUT,
BITSTREAM_METADATA_FORM_GROUP_CONFIG,
BITSTREAM_METADATA_FORM_GROUP_LAYOUT
} from './section-upload-file-edit.model';
@@ -42,7 +41,7 @@ import { SubmissionService } from '../../../../submission.service';
import { FormService } from '../../../../../shared/form/form.service';
import { FormComponent } from '../../../../../shared/form/form.component';
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { filter, mergeMap, take, tap } from 'rxjs/operators';
import { filter, mergeMap, take } from 'rxjs/operators';
import { dateToISOFormat } from '../../../../../shared/date.util';
@@ -54,10 +53,12 @@ import {
JsonPatchOperationPathCombiner
} from '../../../../../core/json-patch/builder/json-patch-operation-path-combiner';
import { SectionUploadService } from '../../section-upload.service';
import { Observable, Subject, Subscription } from 'rxjs';
import { Subscription } from 'rxjs';
import { DynamicFormControlCondition } from '@ng-dynamic-forms/core/lib/model/misc/dynamic-form-control-relation.model';
import { DynamicDateControlValue } from '@ng-dynamic-forms/core/lib/model/dynamic-date-control.model';
import { DynamicCustomSwitchModel } from 'src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.model';
import { SubmissionObject } from 'src/app/core/submission/models/submission-object.model';
import { WorkspaceitemSectionUploadObject } from 'src/app/core/submission/models/workspaceitem-section-upload.model';
/**
* This component represents the edit form for bitstream
@@ -168,12 +169,6 @@ export class SubmissionSectionUploadFileEditComponent
protected subscriptions: Subscription[] = [];
private onSaveBitstreamData$: Subject<any> = new Subject();
get saveBitstreamDataEvent$(): Observable<void> {
return this.onSaveBitstreamData$.asObservable();
}
/**
* Initialize instance variables
*
@@ -206,8 +201,8 @@ export class SubmissionSectionUploadFileEditComponent
*/
public initModelData(formModel: DynamicFormControlModel[]) {
const primaryBitstreammodel: any = this.formBuilderService.findById('primaryBitstream', formModel, this.fileIndex);
primaryBitstreammodel.value = this.isPrimary || false;
const primaryBitstreamModel: any = this.formBuilderService.findById('primary', formModel, this.fileIndex);
primaryBitstreamModel.value = this.isPrimary || false;
this.fileData.accessConditions.forEach((accessCondition, index) => {
Array.of('name', 'startDate', 'endDate')
@@ -417,12 +412,14 @@ export class SubmissionSectionUploadFileEditComponent
// validate form
this.formService.validateAllFormFields(this.formRef.formGroup);
const subscription = this.formService.isValid(this.formId).pipe(
const saveBitstreamDataSubscription = this.formService.isValid(this.formId).pipe(
take(1),
filter((isValid) => isValid),
mergeMap(() => this.formService.getFormData(this.formId)),
take(1),
tap((formData: any) => {
mergeMap((formData: any) => {
this.uploadService.updatePrimaryBitstreamOperation(this.pathCombiner.getPath('primary'), this.isPrimary, formData.primary[0], this.fileId);
// collect bitstream metadata
Object.keys((formData.metadata))
.filter((key) => isNotEmpty(formData.metadata[key]))
@@ -494,9 +491,31 @@ export class SubmissionSectionUploadFileEditComponent
if (isNotEmpty(accessConditionsToSave)) {
this.operationsBuilder.add(this.pathCombiner.getPath([...pathFragment, 'accessConditions']), accessConditionsToSave, true);
}
})
).subscribe((formData) => this.onSaveBitstreamData$.next(formData));
this.subscriptions.push(subscription);
// dispatch a PATCH request to save metadata
return this.operationsService.jsonPatchByResourceID(
this.submissionService.getSubmissionObjectLinkName(),
this.submissionId,
this.pathCombiner.rootElement,
this.pathCombiner.subRootElement);
})
).subscribe((result: SubmissionObject[]) => {
const section = result[0].sections[this.sectionId];
if (!section) {
return;
}
const uploadSection = (section as WorkspaceitemSectionUploadObject);
this.uploadService.updateFilePrimaryBitstream(this.submissionId, this.sectionId, uploadSection.primary);
Object.keys(uploadSection.files)
.filter((key) => uploadSection.files[key].uuid === this.fileId)
.forEach((key) => this.uploadService.updateFileData(
this.submissionId, this.sectionId, this.fileId, uploadSection.files[key])
);
this.isSaving = false;
this.activeModal.close();
});
this.subscriptions.push(saveBitstreamDataSubscription);
}
private unsubscribeAll() {

View File

@@ -64,8 +64,8 @@ export const BITSTREAM_FORM_PRIMARY_LAYOUT: DynamicFormControlLayout = {
};
export const BITSTREAM_FORM_PRIMARY: DynamicSwitchModelConfig = {
id: 'primaryBitstream',
name: 'primaryBitstream',
id: 'primary',
name: 'primary',
label: 'Primary bitstream',
};