@coorpacademy/progression-engine
Version:
148 lines (147 loc) • 10.3 kB
JavaScript
;
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