diff --git a/src/lib/leaderboard/leaderboard.ts b/src/lib/leaderboard/leaderboard.ts index 4f903df04d2dd412271620efc3531ed109d62a05..1dd4d16bc7fb738ebc9463fb6a1556d7ba6a1eb1 100644 --- a/src/lib/leaderboard/leaderboard.ts +++ b/src/lib/leaderboard/leaderboard.ts @@ -170,10 +170,18 @@ export class Leaderboard { } private isCorrectSingleChoiceQuestion(response: number, question: AbstractChoiceQuestionEntity): boolean { + if (typeof response === 'undefined' || typeof response !== 'number' || !question.answerOptionList[response]) { + return false; + } + return question.answerOptionList[response] && question.answerOptionList[response].isCorrect; } private isCorrectMultipleChoiceQuestion(response: Array, question: AbstractChoiceQuestionEntity): number { + if (!Array.isArray(response)) { + return -1; + } + let hasCorrectAnswers = 0; let hasWrongAnswers = 0; question.answerOptionList.forEach((answeroption, answerIndex) => { @@ -193,11 +201,15 @@ export class Leaderboard { } private isCorrectRangedQuestion(response: number, question: RangedQuestionEntity): number { + if (typeof response === 'undefined' || typeof response !== 'number') { + return -1; + } + return response === question.correctValue ? 1 : response >= question.rangeMin && response <= question.rangeMax ? 0 : -1; } private isCorrectFreeTextQuestion(response: string, question: FreeTextQuestionEntity): boolean { - if (!response) { + if (typeof response === 'undefined' || typeof response !== 'string') { return false; }