diff --git a/src/editors/containers/ProblemEditor/data/OLXParser.js b/src/editors/containers/ProblemEditor/data/OLXParser.js index 865a14999..de2761735 100644 --- a/src/editors/containers/ProblemEditor/data/OLXParser.js +++ b/src/editors/containers/ProblemEditor/data/OLXParser.js @@ -330,8 +330,8 @@ export class OLXParser { getProblemType() { const problemKeys = Object.keys(this.problem); - const intersectedProblems = _.intersection(Object.values(ProblemTypeKeys), problemKeys); - if (intersectedProblems.length === 0) { + const problemTypeKeys = problemKeys.filter(key => Object.values(ProblemTypeKeys).indexOf(key) !== -1); + if (problemTypeKeys.length === 0) { // a blank problem is a problem which contains only `` as it's olx. // blank problems are not given types, so that a type may be selected. if (problemKeys.length === 1 && problemKeys[0] === '#text' && this.problem[problemKeys[0]] === '') { @@ -341,10 +341,14 @@ export class OLXParser { return ProblemTypeKeys.ADVANCED; } // make sure compound problems are treated as advanced - if (intersectedProblems.length > 1) { + // TODO: Find a way to add answers using additional_answers v/s numericalresponse + if ((problemTypeKeys.length > 1) + || (problemTypeKeys[0] !== ProblemTypeKeys.NUMERIC // multiple numeric problems are really just multiple answers + && _.isArray(this.problem[problemTypeKeys[0]]) + && this.problem[problemTypeKeys[0]].length > 1)) { return ProblemTypeKeys.ADVANCED; } - const problemType = intersectedProblems[0]; + const problemType = problemTypeKeys[0]; return problemType; } diff --git a/src/editors/containers/ProblemEditor/data/OLXParser.test.js b/src/editors/containers/ProblemEditor/data/OLXParser.test.js index 5823e4b6e..eade6422f 100644 --- a/src/editors/containers/ProblemEditor/data/OLXParser.test.js +++ b/src/editors/containers/ProblemEditor/data/OLXParser.test.js @@ -8,6 +8,7 @@ import { mutlipleChoiceWithFeedbackAndHintsOLX, textInputWithFeedbackAndHintsOLXWithMultipleAnswers, advancedProblemOlX, + multipleProblemOlX, blankProblemOLX, } from './mockData/olxTestData'; import { ProblemTypeKeys } from '../../../data/constants/problem'; @@ -43,6 +44,11 @@ describe('Check OLXParser problem type', () => { const problemType = olxparser.getProblemType(); expect(problemType).toBe(ProblemTypeKeys.ADVANCED); }); + test('Test Advanced Problem Type by multiples', () => { + const olxparser = new OLXParser(multipleProblemOlX.rawOLX); + const problemType = olxparser.getProblemType(); + expect(problemType).toBe(ProblemTypeKeys.ADVANCED); + }); test('Test Blank Problem Type', () => { const olxparser = new OLXParser(blankProblemOLX.rawOLX); const problemType = olxparser.getProblemType(); diff --git a/src/editors/containers/ProblemEditor/data/mockData/olxTestData.js b/src/editors/containers/ProblemEditor/data/mockData/olxTestData.js index 187ce6514..5cae017f9 100644 --- a/src/editors/containers/ProblemEditor/data/mockData/olxTestData.js +++ b/src/editors/containers/ProblemEditor/data/mockData/olxTestData.js @@ -564,6 +564,16 @@ export const advancedProblemOlX = { `, }; +export const multipleProblemOlX = { + rawOLX: ` + + + + + + +`, +}; export const blankProblemOLX = { rawOLX: '', };