forked from hazza/dspace-angular
1078 lines
33 KiB
TypeScript
1078 lines
33 KiB
TypeScript
import { submissionObjectReducer, SubmissionObjectState } from './submission-objects.reducer';
|
|
import {
|
|
CancelSubmissionFormAction,
|
|
ChangeSubmissionCollectionAction,
|
|
CompleteInitSubmissionFormAction,
|
|
DeleteSectionErrorsAction, DeleteUploadedFileAction,
|
|
DepositSubmissionAction,
|
|
DepositSubmissionErrorAction,
|
|
DepositSubmissionSuccessAction,
|
|
DisableSectionAction,
|
|
DiscardSubmissionAction,
|
|
DiscardSubmissionSuccessAction, EditFileDataAction,
|
|
EnableSectionAction,
|
|
InertSectionErrorsAction,
|
|
InitSectionAction,
|
|
InitSubmissionFormAction, NewUploadedFileAction,
|
|
RemoveSectionErrorsAction,
|
|
ResetSubmissionFormAction,
|
|
SaveAndDepositSubmissionAction,
|
|
SaveForLaterSubmissionFormAction,
|
|
SaveForLaterSubmissionFormErrorAction,
|
|
SaveForLaterSubmissionFormSuccessAction,
|
|
SaveSubmissionFormAction,
|
|
SaveSubmissionFormErrorAction,
|
|
SaveSubmissionFormSuccessAction,
|
|
SaveSubmissionSectionFormAction,
|
|
SaveSubmissionSectionFormErrorAction,
|
|
SaveSubmissionSectionFormSuccessAction,
|
|
SectionStatusChangeAction,
|
|
UpdateSectionDataAction
|
|
} from './submission-objects.actions';
|
|
import { SectionsType } from '../sections/sections-type';
|
|
import {
|
|
mockSubmissionCollectionId,
|
|
mockSubmissionDefinitionResponse, mockSubmissionId,
|
|
mockSubmissionSelfUrl,
|
|
mockSubmissionState
|
|
} from '../../shared/mocks/mock-submission';
|
|
|
|
describe('submissionReducer test suite', () => {
|
|
|
|
const collectionId = mockSubmissionCollectionId;
|
|
const submissionId = mockSubmissionId;
|
|
const submissionDefinition = mockSubmissionDefinitionResponse;
|
|
const selfUrl = mockSubmissionSelfUrl;
|
|
|
|
const initState: SubmissionObjectState = mockSubmissionState;
|
|
|
|
it('should init submission state properly', () => {
|
|
const expectedState = {
|
|
826: {
|
|
collection: collectionId,
|
|
definition: 'traditional',
|
|
selfUrl: selfUrl,
|
|
activeSection: null,
|
|
sections: Object.create(null),
|
|
isLoading: true,
|
|
savePending: false,
|
|
depositPending: false,
|
|
}
|
|
};
|
|
|
|
const action = new InitSubmissionFormAction(collectionId, submissionId, selfUrl, submissionDefinition, {}, []);
|
|
const newState = submissionObjectReducer({}, action);
|
|
|
|
expect(newState).toEqual(expectedState);
|
|
});
|
|
|
|
it('should complete submission initialization', () => {
|
|
const state = {
|
|
826: {
|
|
collection: collectionId,
|
|
definition: 'traditional',
|
|
selfUrl: selfUrl,
|
|
activeSection: null,
|
|
sections: {
|
|
extraction: {
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'utils',
|
|
visibility: {
|
|
main: 'HIDDEN',
|
|
other: 'HIDDEN'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any,
|
|
collection: {
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'collection',
|
|
visibility: {
|
|
main: 'HIDDEN',
|
|
other: 'HIDDEN'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any,
|
|
license: {
|
|
header: 'submit.progressbar.license',
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'license',
|
|
visibility: {
|
|
main: null,
|
|
other: 'READONLY'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any
|
|
},
|
|
isLoading: true,
|
|
savePending: false,
|
|
depositPending: false
|
|
}
|
|
};
|
|
const action = new CompleteInitSubmissionFormAction(submissionId);
|
|
const newState = submissionObjectReducer(state, action);
|
|
|
|
expect(newState).toEqual(initState);
|
|
});
|
|
|
|
it('should reset submission state properly', () => {
|
|
const expectedState = {
|
|
826: {
|
|
collection: collectionId,
|
|
definition: 'traditional',
|
|
selfUrl: selfUrl,
|
|
activeSection: null,
|
|
sections: Object.create(null),
|
|
isLoading: true,
|
|
savePending: false,
|
|
depositPending: false,
|
|
}
|
|
};
|
|
|
|
const action = new ResetSubmissionFormAction(collectionId, submissionId, selfUrl, {}, submissionDefinition);
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState).toEqual(expectedState);
|
|
});
|
|
|
|
it('should cancel submission state properly', () => {
|
|
const expectedState = Object.create({});
|
|
|
|
const action = new CancelSubmissionFormAction();
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState).toEqual(expectedState);
|
|
});
|
|
|
|
it('should set to true savePendig flag on save', () => {
|
|
let action = new SaveSubmissionFormAction(submissionId);
|
|
let newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].savePending).toBeTruthy();
|
|
|
|
action = new SaveForLaterSubmissionFormAction(submissionId);
|
|
newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].savePending).toBeTruthy();
|
|
|
|
action = new SaveAndDepositSubmissionAction(submissionId);
|
|
newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].savePending).toBeTruthy();
|
|
|
|
action = new SaveSubmissionSectionFormAction(submissionId, 'traditionalpageone');
|
|
newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].savePending).toBeTruthy();
|
|
});
|
|
|
|
it('should set to false savePendig flag once the save is completed', () => {
|
|
const state = {
|
|
826: {
|
|
collection: collectionId,
|
|
definition: 'traditional',
|
|
selfUrl: selfUrl,
|
|
activeSection: null,
|
|
sections: {
|
|
extraction: {
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'utils',
|
|
visibility: {
|
|
main: 'HIDDEN',
|
|
other: 'HIDDEN'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any,
|
|
collection: {
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'collection',
|
|
visibility: {
|
|
main: 'HIDDEN',
|
|
other: 'HIDDEN'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any,
|
|
traditionalpagetwo: {
|
|
header: 'submit.progressbar.describe.steptwo',
|
|
config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/traditionalpagetwo',
|
|
mandatory: true,
|
|
sectionType: 'submission-form',
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any,
|
|
license: {
|
|
header: 'submit.progressbar.license',
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'license',
|
|
visibility: {
|
|
main: null,
|
|
other: 'READONLY'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any
|
|
},
|
|
isLoading: false,
|
|
savePending: true,
|
|
depositPending: false
|
|
}
|
|
};
|
|
|
|
let action: any = new SaveSubmissionFormSuccessAction(submissionId, []);
|
|
let newState = submissionObjectReducer(state, action);
|
|
|
|
expect(newState[826].savePending).toBeFalsy();
|
|
|
|
action = new SaveForLaterSubmissionFormSuccessAction(submissionId, []);
|
|
newState = submissionObjectReducer(state, action);
|
|
|
|
expect(newState[826].savePending).toBeFalsy();
|
|
|
|
action = new SaveSubmissionSectionFormSuccessAction(submissionId, []);
|
|
newState = submissionObjectReducer(state, action);
|
|
|
|
expect(newState[826].savePending).toBeFalsy();
|
|
|
|
action = new SaveSubmissionFormErrorAction(submissionId);
|
|
newState = submissionObjectReducer(state, action);
|
|
|
|
expect(newState[826].savePending).toBeFalsy();
|
|
|
|
action = new SaveForLaterSubmissionFormErrorAction(submissionId);
|
|
newState = submissionObjectReducer(state, action);
|
|
|
|
expect(newState[826].savePending).toBeFalsy();
|
|
|
|
action = new SaveSubmissionSectionFormErrorAction(submissionId);
|
|
newState = submissionObjectReducer(state, action);
|
|
|
|
expect(newState[826].savePending).toBeFalsy();
|
|
});
|
|
|
|
it('should change submission collection state properly', () => {
|
|
const newCollection = '43fe1f8c-09a6-4fcf-9c78-5d4fed8f2c8f';
|
|
const action = new ChangeSubmissionCollectionAction('826', newCollection);
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].collection).toEqual(newCollection);
|
|
});
|
|
|
|
it('should set to true depositPending flag on deposit', () => {
|
|
const action = new DepositSubmissionAction('826');
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].depositPending).toBeTruthy();
|
|
});
|
|
|
|
it('should reset state once the deposit is completed successfully', () => {
|
|
const state = {
|
|
826: {
|
|
collection: collectionId,
|
|
definition: 'traditional',
|
|
selfUrl: selfUrl,
|
|
activeSection: null,
|
|
sections: {
|
|
extraction: {
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'utils',
|
|
visibility: {
|
|
main: 'HIDDEN',
|
|
other: 'HIDDEN'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any,
|
|
collection: {
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'collection',
|
|
visibility: {
|
|
main: 'HIDDEN',
|
|
other: 'HIDDEN'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any,
|
|
traditionalpagetwo: {
|
|
header: 'submit.progressbar.describe.steptwo',
|
|
config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/traditionalpagetwo',
|
|
mandatory: true,
|
|
sectionType: 'submission-form',
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any,
|
|
license: {
|
|
header: 'submit.progressbar.license',
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'license',
|
|
visibility: {
|
|
main: null,
|
|
other: 'READONLY'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any
|
|
},
|
|
isLoading: false,
|
|
savePending: false,
|
|
depositPending: true
|
|
}
|
|
};
|
|
|
|
const action: any = new DepositSubmissionSuccessAction(submissionId);
|
|
const newState = submissionObjectReducer(state, action);
|
|
|
|
expect(newState).toEqual({});
|
|
});
|
|
|
|
it('should set to false depositPending flag once the deposit is completed unsuccessfully', () => {
|
|
const action = new DepositSubmissionErrorAction('826');
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].depositPending).toBeFalsy();
|
|
});
|
|
|
|
it('should return same state on discard', () => {
|
|
const action: any = new DiscardSubmissionAction(submissionId);
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState).toEqual(initState);
|
|
});
|
|
|
|
it('should reset state once the discard action is completed successfully', () => {
|
|
const action: any = new DiscardSubmissionSuccessAction(submissionId);
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState).toEqual({});
|
|
});
|
|
|
|
it('should return same state once the discard action is completed unsuccessfully', () => {
|
|
const action: any = new DiscardSubmissionAction(submissionId);
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState).toEqual(initState);
|
|
});
|
|
|
|
it('should init submission section state properly', () => {
|
|
const expectedState = {
|
|
header: 'submit.progressbar.describe.stepone',
|
|
config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/traditionalpageone',
|
|
mandatory: true,
|
|
sectionType: 'submission-form',
|
|
visibility: undefined,
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any;
|
|
|
|
let action: any = new InitSubmissionFormAction(collectionId, submissionId, selfUrl, submissionDefinition, {}, []);
|
|
let newState = submissionObjectReducer({}, action);
|
|
|
|
action = new InitSectionAction(
|
|
submissionId,
|
|
'traditionalpageone',
|
|
'submit.progressbar.describe.stepone',
|
|
'https://rest.api/dspace-spring-rest/api/config/submissionforms/traditionalpageone',
|
|
true,
|
|
SectionsType.SubmissionForm,
|
|
undefined,
|
|
true,
|
|
{},
|
|
null);
|
|
|
|
newState = submissionObjectReducer(newState, action);
|
|
|
|
expect(newState[826].sections.traditionalpageone).toEqual(expectedState);
|
|
});
|
|
|
|
it('should enable submission section properly', () => {
|
|
|
|
const action = new EnableSectionAction(submissionId, 'traditionalpagetwo');
|
|
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].sections.traditionalpagetwo.enabled).toBeTruthy();
|
|
});
|
|
|
|
it('should enable submission section properly', () => {
|
|
|
|
let action = new EnableSectionAction(submissionId, 'traditionalpagetwo');
|
|
let newState = submissionObjectReducer(initState, action);
|
|
|
|
action = new DisableSectionAction(submissionId, 'traditionalpagetwo');
|
|
newState = submissionObjectReducer(newState, action);
|
|
|
|
expect(newState[826].sections.traditionalpagetwo.enabled).toBeFalsy();
|
|
});
|
|
|
|
it('should set to true/false submission section status', () => {
|
|
|
|
let action = new SectionStatusChangeAction(submissionId, 'traditionalpageone', true);
|
|
let newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].sections.traditionalpageone.isValid).toBeTruthy();
|
|
|
|
action = new SectionStatusChangeAction(submissionId, 'traditionalpageone', false);
|
|
newState = submissionObjectReducer(newState, action);
|
|
|
|
expect(newState[826].sections.traditionalpageone.isValid).toBeFalsy();
|
|
});
|
|
|
|
it('should update submission section data properly', () => {
|
|
const data = {
|
|
'dc.contributor.author': [
|
|
{
|
|
value: 'Author, Test',
|
|
language: null,
|
|
authority: null,
|
|
display: 'Author, Test',
|
|
confidence: -1,
|
|
place: 0
|
|
}
|
|
],
|
|
'dc.title': [
|
|
{
|
|
value: 'Title Test',
|
|
language: null,
|
|
authority: null,
|
|
display: 'Title Test',
|
|
confidence: -1,
|
|
place: 0
|
|
}
|
|
],
|
|
'dc.date.issued': [
|
|
{
|
|
value: '2015',
|
|
language: null,
|
|
authority: null,
|
|
display: '2015',
|
|
confidence: -1,
|
|
place: 0
|
|
}
|
|
]
|
|
} as any;
|
|
|
|
const action = new UpdateSectionDataAction(submissionId, 'traditionalpageone', data, []);
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].sections.traditionalpageone.data).toEqual(data);
|
|
});
|
|
|
|
it('should add submission section errors properly', () => {
|
|
const errors = [
|
|
{
|
|
path: '/sections/license',
|
|
message: 'error.validation.license.notgranted'
|
|
}
|
|
];
|
|
|
|
const action = new UpdateSectionDataAction(submissionId, 'traditionalpageone', {}, errors);
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].sections.traditionalpageone.errors).toEqual(errors);
|
|
});
|
|
|
|
it('should remove all submission section errors properly', () => {
|
|
const errors = [
|
|
{
|
|
path: '/sections/license',
|
|
message: 'error.validation.license.notgranted'
|
|
}
|
|
];
|
|
|
|
let action: any = new UpdateSectionDataAction(submissionId, 'traditionalpageone', {}, errors);
|
|
let newState;
|
|
|
|
action = new RemoveSectionErrorsAction(submissionId, 'traditionalpageone');
|
|
newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].sections.traditionalpageone.errors).toEqual([]);
|
|
});
|
|
|
|
it('should add submission section error properly', () => {
|
|
const error = {
|
|
path: '/sections/traditionalpageone/dc.title/0',
|
|
message: 'error.validation.traditionalpageone.required'
|
|
};
|
|
|
|
const action = new InertSectionErrorsAction(submissionId, 'traditionalpageone', error);
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].sections.traditionalpageone.errors).toEqual([error]);
|
|
});
|
|
|
|
it('should remove specified submission section error/s properly', () => {
|
|
const errors = [
|
|
{
|
|
path: '/sections/traditionalpageone/dc.contributor.author',
|
|
message: 'error.validation.required'
|
|
},
|
|
{
|
|
path: '/sections/traditionalpageone/dc.date.issued',
|
|
message: 'error.validation.required'
|
|
}
|
|
];
|
|
const error = {
|
|
path: '/sections/traditionalpageone/dc.contributor.author',
|
|
message: 'error.validation.required'
|
|
};
|
|
|
|
const expectedErrors = [{
|
|
path: '/sections/traditionalpageone/dc.date.issued',
|
|
message: 'error.validation.required'
|
|
}];
|
|
|
|
let action: any = new UpdateSectionDataAction(submissionId, 'traditionalpageone', {}, errors);
|
|
let newState = submissionObjectReducer(initState, action);
|
|
|
|
action = new DeleteSectionErrorsAction(submissionId, 'traditionalpageone', error);
|
|
newState = submissionObjectReducer(newState, action);
|
|
|
|
expect(newState[826].sections.traditionalpageone.errors).toEqual(expectedErrors);
|
|
|
|
action = new UpdateSectionDataAction(submissionId, 'traditionalpageone', {}, errors);
|
|
newState = submissionObjectReducer(initState, action);
|
|
|
|
action = new DeleteSectionErrorsAction(submissionId, 'traditionalpageone', errors);
|
|
newState = submissionObjectReducer(newState, action);
|
|
|
|
expect(newState[826].sections.traditionalpageone.errors).toEqual([]);
|
|
});
|
|
|
|
it('should add a new file', () => {
|
|
const uuid = '8cd86fba-70c8-483d-838a-70d28e7ed570';
|
|
const fileData: any = {
|
|
uuid: uuid,
|
|
metadata: {
|
|
'dc.title': [
|
|
{
|
|
value: '28297_389341539060_6452876_n.jpg',
|
|
language: null,
|
|
authority: null,
|
|
display: '28297_389341539060_6452876_n.jpg',
|
|
confidence: -1,
|
|
place: 0
|
|
}
|
|
]
|
|
},
|
|
accessConditions: [],
|
|
format: {
|
|
id: 16,
|
|
shortDescription: 'JPEG',
|
|
description: 'Joint Photographic Experts Group/JPEG File Interchange Format (JFIF)',
|
|
mimetype: 'image/jpeg',
|
|
supportLevel: 0,
|
|
internal: false,
|
|
extensions: null,
|
|
type: 'bitstreamformat'
|
|
},
|
|
sizeBytes: 22737,
|
|
checkSum: {
|
|
checkSumAlgorithm: 'MD5',
|
|
value: '8722864dd671912f94a999ac7c4949d2'
|
|
},
|
|
url: 'https://rest.api/dspace-spring-rest/api/core/bitstreams/8cd86fba-70c8-483d-838a-70d28e7ed570/content'
|
|
};
|
|
const expectedState = {
|
|
files: [fileData]
|
|
};
|
|
|
|
const action = new NewUploadedFileAction(submissionId, 'upload', uuid, fileData);
|
|
const newState = submissionObjectReducer(initState, action);
|
|
|
|
expect(newState[826].sections.upload.data).toEqual(expectedState);
|
|
});
|
|
|
|
it('should remove a file', () => {
|
|
const uuid = '8cd86fba-70c8-483d-838a-70d28e7ed570';
|
|
const uuid2 = '7e2f4ba9-9316-41fd-844a-1ef435f41a42';
|
|
const fileData: any = {
|
|
uuid: uuid,
|
|
metadata: {
|
|
'dc.title': [
|
|
{
|
|
value: 'image_test.jpg',
|
|
language: null,
|
|
authority: null,
|
|
display: 'image_test.jpg',
|
|
confidence: -1,
|
|
place: 0
|
|
}
|
|
]
|
|
},
|
|
accessConditions: [],
|
|
format: {
|
|
id: 16,
|
|
shortDescription: 'JPEG',
|
|
description: 'Joint Photographic Experts Group/JPEG File Interchange Format (JFIF)',
|
|
mimetype: 'image/jpeg',
|
|
supportLevel: 0,
|
|
internal: false,
|
|
extensions: null,
|
|
type: 'bitstreamformat'
|
|
},
|
|
sizeBytes: 22737,
|
|
checkSum: {
|
|
checkSumAlgorithm: 'MD5',
|
|
value: '8722864dd671912f94a999ac7c4949d2'
|
|
},
|
|
url: 'https://rest.api/dspace-spring-rest/api/core/bitstreams/8cd86fba-70c8-483d-838a-70d28e7ed570/content'
|
|
};
|
|
const fileData2: any = {
|
|
uuid: uuid2,
|
|
metadata: {
|
|
'dc.title': [
|
|
{
|
|
value: 'image_test.jpg',
|
|
language: null,
|
|
authority: null,
|
|
display: 'image_test.jpg',
|
|
confidence: -1,
|
|
place: 0
|
|
}
|
|
]
|
|
},
|
|
accessConditions: [],
|
|
format: {
|
|
id: 16,
|
|
shortDescription: 'JPEG',
|
|
description: 'Joint Photographic Experts Group/JPEG File Interchange Format (JFIF)',
|
|
mimetype: 'image/jpeg',
|
|
supportLevel: 0,
|
|
internal: false,
|
|
extensions: null,
|
|
type: 'bitstreamformat'
|
|
},
|
|
sizeBytes: 22737,
|
|
checkSum: {
|
|
checkSumAlgorithm: 'MD5',
|
|
value: '8722864dd671912f94a999ac7c4949d2'
|
|
},
|
|
url: 'https://rest.api/dspace-spring-rest/api/core/bitstreams/7e2f4ba9-9316-41fd-844a-1ef435f41a42/content'
|
|
};
|
|
const state: SubmissionObjectState = {
|
|
826: {
|
|
collection: collectionId,
|
|
definition: 'traditional',
|
|
selfUrl: selfUrl,
|
|
activeSection: null,
|
|
sections: {
|
|
extraction: {
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'utils',
|
|
visibility: {
|
|
main: 'HIDDEN',
|
|
other: 'HIDDEN'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any,
|
|
collection: {
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'collection',
|
|
visibility: {
|
|
main: 'HIDDEN',
|
|
other: 'HIDDEN'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: [fileData, fileData2]
|
|
},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any,
|
|
license: {
|
|
header: 'submit.progressbar.license',
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'license',
|
|
visibility: {
|
|
main: null,
|
|
other: 'READONLY'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any
|
|
},
|
|
isLoading: false,
|
|
savePending: false,
|
|
depositPending: false
|
|
}
|
|
};
|
|
const expectedState = {
|
|
files: [fileData]
|
|
};
|
|
|
|
const action = new DeleteUploadedFileAction(submissionId, 'upload', uuid2);
|
|
const newState = submissionObjectReducer(state, action);
|
|
|
|
expect(newState[826].sections.upload.data).toEqual(expectedState);
|
|
});
|
|
|
|
it('should edit file data', () => {
|
|
const uuid = '8cd86fba-70c8-483d-838a-70d28e7ed570';
|
|
const fileData: any = {
|
|
uuid: uuid,
|
|
metadata: {
|
|
'dc.title': [
|
|
{
|
|
value: 'image_test.jpg',
|
|
language: null,
|
|
authority: null,
|
|
display: 'image_test.jpg',
|
|
confidence: -1,
|
|
place: 0
|
|
}
|
|
]
|
|
},
|
|
accessConditions: [],
|
|
format: {
|
|
id: 16,
|
|
shortDescription: 'JPEG',
|
|
description: 'Joint Photographic Experts Group/JPEG File Interchange Format (JFIF)',
|
|
mimetype: 'image/jpeg',
|
|
supportLevel: 0,
|
|
internal: false,
|
|
extensions: null,
|
|
type: 'bitstreamformat'
|
|
},
|
|
sizeBytes: 22737,
|
|
checkSum: {
|
|
checkSumAlgorithm: 'MD5',
|
|
value: '8722864dd671912f94a999ac7c4949d2'
|
|
},
|
|
url: 'https://rest.api/dspace-spring-rest/api/core/bitstreams/8cd86fba-70c8-483d-838a-70d28e7ed570/content'
|
|
};
|
|
const fileData2: any = {
|
|
uuid: uuid,
|
|
metadata: {
|
|
'dc.title': [
|
|
{
|
|
value: 'New title',
|
|
language: null,
|
|
authority: null,
|
|
display: 'New title',
|
|
confidence: -1,
|
|
place: 0
|
|
}
|
|
]
|
|
},
|
|
accessConditions: [],
|
|
format: {
|
|
id: 16,
|
|
shortDescription: 'JPEG',
|
|
description: 'Joint Photographic Experts Group/JPEG File Interchange Format (JFIF)',
|
|
mimetype: 'image/jpeg',
|
|
supportLevel: 0,
|
|
internal: false,
|
|
extensions: null,
|
|
type: 'bitstreamformat'
|
|
},
|
|
sizeBytes: 22737,
|
|
checkSum: {
|
|
checkSumAlgorithm: 'MD5',
|
|
value: '8722864dd671912f94a999ac7c4949d2'
|
|
},
|
|
url: 'https://rest.api/dspace-spring-rest/api/core/bitstreams/7e2f4ba9-9316-41fd-844a-1ef435f41a42/content'
|
|
};
|
|
|
|
const state: SubmissionObjectState = {
|
|
826: {
|
|
collection: collectionId,
|
|
definition: 'traditional',
|
|
selfUrl: selfUrl,
|
|
activeSection: null,
|
|
sections: {
|
|
extraction: {
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'utils',
|
|
visibility: {
|
|
main: 'HIDDEN',
|
|
other: 'HIDDEN'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any,
|
|
collection: {
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'collection',
|
|
visibility: {
|
|
main: 'HIDDEN',
|
|
other: 'HIDDEN'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: 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: [fileData]
|
|
},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any,
|
|
license: {
|
|
header: 'submit.progressbar.license',
|
|
config: '',
|
|
mandatory: true,
|
|
sectionType: 'license',
|
|
visibility: {
|
|
main: null,
|
|
other: 'READONLY'
|
|
},
|
|
collapsed: false,
|
|
enabled: true,
|
|
data: {},
|
|
errors: [],
|
|
isLoading: false,
|
|
isValid: false
|
|
} as any
|
|
},
|
|
isLoading: false,
|
|
savePending: false,
|
|
depositPending: false
|
|
}
|
|
};
|
|
const expectedState = {
|
|
files: [fileData2]
|
|
};
|
|
|
|
const action = new EditFileDataAction(submissionId, 'upload', uuid, fileData2);
|
|
const newState = submissionObjectReducer(state, action);
|
|
|
|
expect(newState[826].sections.upload.data).toEqual(expectedState);
|
|
});
|
|
|
|
});
|