verify whether file uploads are mandatory

This commit is contained in:
Ben Bosman
2020-01-02 18:45:09 +01:00
parent 4b67dbf10f
commit 375b51d0d4
3 changed files with 43 additions and 3 deletions

View File

@@ -1325,7 +1325,7 @@ export const mockUploadConfigResponse = {
}, },
self: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/bitstream-metadata' self: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/bitstream-metadata'
}, },
required: false, required: true,
maxSize: 536870912, maxSize: 536870912,
name: 'upload', name: 'upload',
type: 'submissionupload', type: 'submissionupload',
@@ -1336,6 +1336,9 @@ export const mockUploadConfigResponse = {
self: 'https://rest.api/dspace-spring-rest/api/config/submissionuploads/upload' self: 'https://rest.api/dspace-spring-rest/api/config/submissionuploads/upload'
}; };
export const mockUploadConfigResponseNotRequired = mockUploadConfigResponse;
mockUploadConfigResponseNotRequired.required = false;
export const mockAccessConditionOptions = [ export const mockAccessConditionOptions = [
{ {
name: 'openaccess', name: 'openaccess',

View File

@@ -18,6 +18,7 @@ import {
mockSubmissionId, mockSubmissionId,
mockSubmissionState, mockSubmissionState,
mockUploadConfigResponse, mockUploadConfigResponse,
mockUploadConfigResponseNotRequired,
mockUploadFiles mockUploadFiles
} from '../../../shared/mocks/mock-submission'; } from '../../../shared/mocks/mock-submission';
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
@@ -215,6 +216,7 @@ describe('SubmissionSectionUploadComponent test suite', () => {
expect(comp.collectionName).toBe(mockCollection.name); expect(comp.collectionName).toBe(mockCollection.name);
expect(comp.availableAccessConditionOptions.length).toBe(4); expect(comp.availableAccessConditionOptions.length).toBe(4);
expect(comp.availableAccessConditionOptions).toEqual(mockUploadConfigResponse.accessConditionOptions as any); expect(comp.availableAccessConditionOptions).toEqual(mockUploadConfigResponse.accessConditionOptions as any);
expect(comp.required).toBe(true);
expect(compAsAny.subs.length).toBe(2); expect(compAsAny.subs.length).toBe(2);
expect(compAsAny.availableGroups.size).toBe(2); expect(compAsAny.availableGroups.size).toBe(2);
expect(compAsAny.availableGroups).toEqual(expectedGroupsMap); expect(compAsAny.availableGroups).toEqual(expectedGroupsMap);
@@ -254,6 +256,7 @@ describe('SubmissionSectionUploadComponent test suite', () => {
expect(comp.collectionName).toBe(mockCollection.name); expect(comp.collectionName).toBe(mockCollection.name);
expect(comp.availableAccessConditionOptions.length).toBe(4); expect(comp.availableAccessConditionOptions.length).toBe(4);
expect(comp.availableAccessConditionOptions).toEqual(mockUploadConfigResponse.accessConditionOptions as any); expect(comp.availableAccessConditionOptions).toEqual(mockUploadConfigResponse.accessConditionOptions as any);
expect(comp.required).toBe(true);
expect(compAsAny.subs.length).toBe(2); expect(compAsAny.subs.length).toBe(2);
expect(compAsAny.availableGroups.size).toBe(2); expect(compAsAny.availableGroups.size).toBe(2);
expect(compAsAny.availableGroups).toEqual(expectedGroupsMap); expect(compAsAny.availableGroups).toEqual(expectedGroupsMap);
@@ -263,17 +266,41 @@ describe('SubmissionSectionUploadComponent test suite', () => {
}); });
it('should the properly section status', () => { it('should properly read the section status', () => {
bitstreamService.getUploadedFileList.and.returnValue(hot('-a-b', { bitstreamService.getUploadedFileList.and.returnValue(hot('-a-b', {
a: [], a: [],
b: mockUploadFiles b: mockUploadFiles
})); }));
expect(comp.required).toBe(true);
expect(compAsAny.getSectionStatus()).toBeObservable(cold('-c-d', { expect(compAsAny.getSectionStatus()).toBeObservable(cold('-c-d', {
c: false, c: false,
d: true d: true
})); }));
}); });
it('should properly read the section status when required is false', () => {
uploadsConfigService.getConfigByHref.and.returnValue(observableOf(
new ConfigData(new PageInfo(), mockUploadConfigResponseNotRequired as any)
));
bitstreamService.getUploadedFileList.and.returnValue(observableOf(mockUploadFiles));
comp.onSectionInit();
bitstreamService.getUploadedFileList.and.returnValue(hot('-a-b', {
a: [],
b: mockUploadFiles
}));
expect(comp.required).toBe(false);
expect(compAsAny.getSectionStatus()).toBeObservable(cold('-c-d', {
c: true,
d: true
}));
});
}); });
}); });

View File

@@ -104,6 +104,12 @@ export class SubmissionSectionUploadComponent extends SectionModelComponent {
*/ */
protected availableGroups: Map<string, Group[]>; // Groups for any policy protected availableGroups: Map<string, Group[]>; // Groups for any policy
/**
* Is the upload required
* @type {boolean}
*/
public required: boolean;
/** /**
* Array to track all subscriptions and unsubscribe them onDestroy * Array to track all subscriptions and unsubscribe them onDestroy
* @type {Array} * @type {Array}
@@ -172,6 +178,7 @@ export class SubmissionSectionUploadComponent extends SectionModelComponent {
}), }),
flatMap(() => config$), flatMap(() => config$),
flatMap((config: SubmissionUploadsModel) => { flatMap((config: SubmissionUploadsModel) => {
this.required = config.required;
this.availableAccessConditionOptions = isNotEmpty(config.accessConditionOptions) ? config.accessConditionOptions : []; this.availableAccessConditionOptions = isNotEmpty(config.accessConditionOptions) ? config.accessConditionOptions : [];
this.collectionPolicyType = this.availableAccessConditionOptions.length > 0 this.collectionPolicyType = this.availableAccessConditionOptions.length > 0
@@ -273,8 +280,11 @@ export class SubmissionSectionUploadComponent extends SectionModelComponent {
* the section status * the section status
*/ */
protected getSectionStatus(): Observable<boolean> { protected getSectionStatus(): Observable<boolean> {
// if not mandatory, always true
// if mandatory, at least one file is required
return this.bitstreamService.getUploadedFileList(this.submissionId, this.sectionData.id).pipe( return this.bitstreamService.getUploadedFileList(this.submissionId, this.sectionData.id).pipe(
map((fileList: any[]) => (isNotUndefined(fileList) && fileList.length > 0))); map((fileList: any[]) =>
(!this.required || (isNotUndefined(fileList) && fileList.length > 0))));
} }
/** /**