diff --git a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/hooks.js b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/hooks.js index 5cdc2c34a..b115d8cd0 100644 --- a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/hooks.js +++ b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/hooks.js @@ -110,11 +110,13 @@ export const resetCardHooks = (updateSettings) => { export const scoringCardHooks = (scoring, updateSettings, defaultValue) => { let loadedAttemptsNumber = scoring.attempts.number; - if (scoring.attempts.number === defaultValue) { - loadedAttemptsNumber = `${scoring.attempts.number} (Default)`; - updateSettings({ scoring: { ...scoring, attempts: { number: null, unlimited: false } } }); + if ((loadedAttemptsNumber === defaultValue || !_.isFinite(loadedAttemptsNumber)) && _.isFinite(defaultValue)) { + loadedAttemptsNumber = `${defaultValue} (Default)`; + } else if (loadedAttemptsNumber === defaultValue && _.isNil(defaultValue)) { + loadedAttemptsNumber = ''; } const [attemptDisplayValue, setAttemptDisplayValue] = module.state.attemptDisplayValue(loadedAttemptsNumber); + const handleUnlimitedChange = (event) => { const isUnlimited = event.target.checked; if (isUnlimited) { diff --git a/src/editors/containers/ProblemEditor/data/SettingsParser.js b/src/editors/containers/ProblemEditor/data/SettingsParser.js index d12fe4f0e..918a9eac2 100644 --- a/src/editors/containers/ProblemEditor/data/SettingsParser.js +++ b/src/editors/containers/ProblemEditor/data/SettingsParser.js @@ -15,16 +15,18 @@ export const parseScoringSettings = (metadata, defaultSettings) => { let scoring = {}; const attempts = popuplateItem({}, 'max_attempts', 'number', metadata); + const initialAttempts = _.get(attempts, 'number', null); + const defaultAttempts = _.get(defaultSettings, 'max_attempts', null); 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 (!_.isFinite(initialAttempts) || initialAttempts === defaultAttempts) { + // set number to null in any case as lms will pick default value if it exists. + attempts.number = null; } - // if above statement was true and no default was found, set unlimited to true - if (_.isNil(attempts.number)) { - attempts.number = ''; + // if both block number and default number are null set unlimited to true. + if (_.isNil(initialAttempts) && _.isNil(defaultAttempts)) { attempts.unlimited = true; } diff --git a/src/editors/containers/ProblemEditor/data/SettingsParser.test.js b/src/editors/containers/ProblemEditor/data/SettingsParser.test.js index bb9515154..063484cea 100644 --- a/src/editors/containers/ProblemEditor/data/SettingsParser.test.js +++ b/src/editors/containers/ProblemEditor/data/SettingsParser.test.js @@ -32,7 +32,7 @@ describe('Test Settings to State Parser', () => { test('Test score settings attempts missing with default max_attempts', () => { const scoreSettings = parseScoringSettings(singleSelectWithHints.metadata, defaultSettings); - expect(scoreSettings.attempts).toStrictEqual({ number: 1, unlimited: false }); + expect(scoreSettings.attempts).toStrictEqual({ number: null, unlimited: false }); }); test('Test negative attempts in score', () => { @@ -47,12 +47,12 @@ describe('Test Settings to State Parser', () => { test('Test score settings missing with default', () => { const settings = parseSettings(singleSelectWithHints.metadata, defaultSettings); - expect(settings.scoring).toStrictEqual({ attempts: { number: 1, unlimited: false } }); + expect(settings.scoring).toStrictEqual({ attempts: { number: null, 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 } }); + expect(settings.scoring).toStrictEqual({ attempts: { number: null, unlimited: true } }); }); test('Test invalid randomization', () => { diff --git a/src/editors/containers/ProblemEditor/data/mockData/problemTestData.js b/src/editors/containers/ProblemEditor/data/mockData/problemTestData.js index 3dba52653..65e6d3a89 100644 --- a/src/editors/containers/ProblemEditor/data/mockData/problemTestData.js +++ b/src/editors/containers/ProblemEditor/data/mockData/problemTestData.js @@ -356,7 +356,7 @@ export const singleSelectWithHints = { scoring: { attempts: { unlimited: true, - number: '', + number: null, }, }, timeBetween: 0,