UNPKG

@coorpacademy/progression-engine

Version:

148 lines (147 loc) 10.3 kB
"use strict"; var _assert = _interopRequireDefault(require("assert")); var _ava = _interopRequireDefault(require("ava")); var _config = require("../config"); var _assertCheckAnswerCorrectness = require("./helpers/assert-check-answer-correctness"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const config = (0, _config.getConfig)({ ref: 'microlearning', version: 'latest' }); function createQuestion(answers, choiceTypes, maxTypos) { answers.forEach(answer => { _assert.default.equal(answer.length, choiceTypes.length, 'The number of answers in an allowed answer should match the number of answer inputs'); }); return { type: 'template', content: { matchOrder: true, maxTypos, choices: choiceTypes.map((type, index) => ({ _id: `id-${index}`, label: `choice-${index}`, type })), answers } }; } (0, _ava.default)('should return true when all the given answer matches a possible answer exactly', t => { const question = createQuestion([['2', 'un'], ['deux', 'un'], ['saut', 'parachute']], ['text', 'text']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['2', 'un']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['deux', 'un']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['saut', 'parachute']); }); (0, _ava.default)('should return false when answers are correct but in an incorrect order', t => { const question = createQuestion([['2', 'un'], ['deux', 'un'], ['saut', 'parachute']], ['text', 'text']); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['un', '2'], [false, false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['un', 'deux'], [false, false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['parachute', 'saut'], [false, false]); }); (0, _ava.default)('should return false when the given answer is partially incorrect', t => { const question = createQuestion([['2', 'un'], ['deux', 'un'], ['saut', 'parachute']], ['text', 'text']); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['2', 'AAAAAAA'], [true, false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['deux', 'AAAAAAAA'], [true, false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['saut', 'AAAAAAAA'], [true, false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['AAAAAAAA', 'un'], [false, true]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['AAAAAAAA', 'un'], [false, true]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['AAAAAAAA', 'parachute'], [false, true]); }); (0, _ava.default)('should allow typos in text inputs', t => { const question = createQuestion([['2', 'un'], ['deux', 'un'], ['saut', 'parachute']], ['text', 'text']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['saut', 'parachutee']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['sauZt', 'parachute']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['sauZZt', 'parachutee']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['saut', 'pOrOchute']); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['sauZZZZZt', 'parachute'], [false, true]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['saut', 'parachutZZZe'], [true, false]); }); (0, _ava.default)('should allow and ignore blank spaces in text inputs', t => { const question = createQuestion([['2', 'un'], ['deux', 'un'], ['saut', 'parachute']], ['text', 'text']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['saut ', 'parachute']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, [' saut', 'parachute']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['saut', ' parachute']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['saut', 'parachute ']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, [' saut ', ' parachute ']); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, [' sauZZZZZt', ' parachute'], [false, true]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['saut ', 'parachutZZZe '], [true, false]); }); (0, _ava.default)('should use the maxTypos value from the question if available', t => { const questionWithTypos0 = createQuestion([['parachute']], ['text'], 0); const questionWithTypos3 = createQuestion([['parachute']], ['text'], 3); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, questionWithTypos0, ['parachute']); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, questionWithTypos0, ['parachutZe'], [false]); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, questionWithTypos3, ['parachute']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, questionWithTypos3, ['parachut']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, questionWithTypos3, ['parachu']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, questionWithTypos3, ['parach']); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, questionWithTypos3, ['parac'], [false]); }); (0, _ava.default)('allowed answers should be made case insensitive', t => { const question = createQuestion([['fooBAR', 'PARACHUTE']], ['text', 'text']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['fooBAR', 'PARACHUTE']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['foobar', 'parachute']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['FOOBAR', 'PARACHUTE']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['ZZZZZfooBAR', 'ZZZZZPARACHUTE']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['ZZZZZfoobar', 'ZZZZZparachute']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['ZZZZZFOOBAR', 'ZZZZZPARACHUTE']); }); (0, _ava.default)('should allow additional characters on the sides of text inputs', t => { const question = createQuestion([['parachute']], ['text']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['parachute']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['Parachute']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['parachuté']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['parachuteZZZZZ']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['ZZZZZparachute']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['ZZZZZparachuteZZZZZ']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['PARACHUTEZZZZ']); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['parachuteZZZZZZ'], [false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['ZZZZZZparachute'], [false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['ZZZZZZparachuteZZZZZZ'], [false]); }); (0, _ava.default)('should not allow typos or additional characters for select inputs', t => { const question = createQuestion([['parachute']], ['select']); (0, _assertCheckAnswerCorrectness.assertCorrect)(t, config, question, ['parachute']); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['Parachute'], [false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['PARACHUTE'], [false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['parachOte'], [false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['parachuteZ'], [false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['Zparachute'], [false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['parachuté'], [false]); }); (0, _ava.default)('should return false when the given answer has more elements that the accepted answers', t => { const question = createQuestion([['2', 'un'], ['deux', 'un'], ['saut', 'parachute']], ['text', 'text']); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['2', 'un', 'trois'], [true, true, false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['deux', 'un', 'trois'], [true, true, false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['saut', 'parachute', 'avion'], [true, true, false]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['saut', 'parachute', 'avion', 'pilote'], [true, true, false, false]); }); (0, _ava.default)('should return false when the given answer has less elements that the accepted answerss', t => { const question = createQuestion([['2', 'un'], ['deux', 'un'], ['saut', 'parachute']], ['text', 'text']); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['2'], [true]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['deux'], [true]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, ['saut'], [true]); (0, _assertCheckAnswerCorrectness.assertIncorrect)(t, config, question, [], []); }); (0, _ava.default)('should return false when there are no correct answers', t => { const question = { type: 'template', content: { matchOrder: true, choices: [{ _id: `1`, label: `choice-1`, type: 'text' }, { _id: `1`, label: `choice-1`, type: 'text' }], answers: [] } }; (0, _assertCheckAnswerCorrectness.assertIncorrectEmptyAnswer)(t, config, question, []); (0, _assertCheckAnswerCorrectness.assertIncorrectEmptyAnswer)(t, config, question, ['foo']); (0, _assertCheckAnswerCorrectness.assertIncorrectEmptyAnswer)(t, config, question, ['foo', 'bar']); }); //# sourceMappingURL=check-answer-correctness.template.js.map