refactor: improve setting parser condition handling
This commit is contained in:
@@ -15,24 +15,23 @@ export const parseScoringSettings = (metadata, defaultSettings) => {
|
||||
let scoring = {};
|
||||
|
||||
let attempts = popuplateItem({}, 'max_attempts', 'number', metadata);
|
||||
// TODO: impove below condition handling
|
||||
if ((_.isEmpty(attempts) || _.isNaN(attempts.number)) && (_.isEmpty(defaultSettings) || _.isNaN(defaultSettings.max_attempts))) {
|
||||
attempts = { unlimited: true, number: '' };
|
||||
} else if (!_.isEmpty(attempts) && !_.isNaN(attempts.number)) {
|
||||
attempts.unlimited = false;
|
||||
attempts.number = attempts.number;
|
||||
if (attempts.number < 0) {
|
||||
attempts.number = 0;
|
||||
}
|
||||
} else if (!_.isNaN(defaultSettings.max_attempts)) {
|
||||
attempts.unlimited = false;
|
||||
attempts.number = defaultSettings.max_attempts;
|
||||
} else {
|
||||
attempts.unlimited = false;
|
||||
if (attempts.number < 0) {
|
||||
attempts.number = 0;
|
||||
}
|
||||
attempts.unlimited = false;
|
||||
|
||||
// isFinite checks if value is a finite primitive number.
|
||||
if (!_.isFinite(_.get(attempts, 'number', null))) {
|
||||
attempts.number = _.get(defaultSettings, 'max_attempts', null);
|
||||
}
|
||||
|
||||
// if above statement was true and no default was found, set unlimited to true
|
||||
if (_.isNil(attempts.number)) {
|
||||
attempts.number = '';
|
||||
attempts.unlimited = true;
|
||||
}
|
||||
|
||||
if (attempts.number < 0) {
|
||||
attempts.number = 0;
|
||||
}
|
||||
|
||||
scoring = { ...scoring, attempts };
|
||||
|
||||
scoring = popuplateItem(scoring, 'weight', 'weight', metadata);
|
||||
|
||||
@@ -30,6 +30,11 @@ describe('Test Settings to State Parser', () => {
|
||||
expect(scoreSettings.attempts).toStrictEqual(singleSelectWithHints.state.settings.scoring.attempts);
|
||||
});
|
||||
|
||||
test('Test score settings attempts missing with default max_attempts', () => {
|
||||
const scoreSettings = parseScoringSettings(singleSelectWithHints.metadata, defaultSettings);
|
||||
expect(scoreSettings.attempts).toStrictEqual({number: 1, unlimited: false});
|
||||
});
|
||||
|
||||
test('Test negative attempts in score', () => {
|
||||
const scoreSettings = parseScoringSettings(negativeAttempts.metadata, defaultSettings);
|
||||
expect(scoreSettings.attempts).toStrictEqual(negativeAttempts.state.settings.scoring.attempts);
|
||||
@@ -40,6 +45,16 @@ describe('Test Settings to State Parser', () => {
|
||||
expect(settings.scoring).toStrictEqual(singleSelectWithHints.state.settings.scoring);
|
||||
});
|
||||
|
||||
test('Test score settings missing with default', () => {
|
||||
const settings = parseSettings(singleSelectWithHints.metadata, defaultSettings);
|
||||
expect(settings.scoring).toStrictEqual({attempts: {number: 1, unlimited: false}});
|
||||
});
|
||||
|
||||
test('Test score settings missing with null default', () => {
|
||||
const settings = parseSettings(singleSelectWithHints.metadata, {max_attempts: null});
|
||||
expect(settings.scoring).toStrictEqual({attempts: {number: '', unlimited: true}});
|
||||
});
|
||||
|
||||
test('Test invalid randomization', () => {
|
||||
const settings = parseSettings(numericWithHints.metadata, defaultSettings);
|
||||
expect(settings.randomization).toBeUndefined();
|
||||
|
||||
Reference in New Issue
Block a user