Skip to content
This repository has been archived by the owner on Mar 7, 2023. It is now read-only.

Commit

Permalink
case where qrocm-ind and qrocm-dep are numbers
Browse files Browse the repository at this point in the history
  • Loading branch information
bdavidxyz committed Feb 23, 2017
1 parent ca37cdb commit 8001ee1
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 136 deletions.
137 changes: 12 additions & 125 deletions api/lib/domain/services/solution-service-qrocm-dep.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,135 +13,21 @@ const utils = require('./solution-service-utils');
function _applyTreatmentsToSolutions(solutions) {
return _.mapValues(solutions, (validSolutions) => {
return _.map(validSolutions, (validSolution) => {
return utils._treatmentT2(utils._treatmentT1(validSolution));
// toString() in case the admin entered number as solution,
// yaml converter may convert it into number and not string.
return utils._treatmentT2(utils._treatmentT1(validSolution.toString()));
});
});
}

/*------------------------------------------------
Calculates ALL possible validations for ALL answers
Example
answers
{ num1: 'google.fr', num2: 'bad answer', num3: 'bad answer' };
solutions
{ Google: 'google,google.fr,google search', Yahoo: 'yahoo,yahoo answer', Bing: 'bing' };
Returns

function _applyTreatmentsToAnswers(answers) {
// toString() in case the user entered number as solution,
// yaml converter may convert it into number and not string.
return _.mapValues(answers, _.toString);
}

{
"google.fr_num1": [
{
"userAnswer": "google.fr"
"adminAnswers": "[\"google\",\"google.fr\",\"google search\"]"
"t1": "google.fr"
"t1t2": "googlefr"
"t1t2t3Ratio": 0.15
"t1t3Ratio": 0
"t2": "googlefr"
"t2t3Ratio": 0.15
"t3Ratio": 0
}
{
"userAnswer": "google.fr"
"adminAnswers": "[\"yahoo\",\"yahoo answer\"]"
"t1": "google.fr"
"t1t2": "googlefr"
"t1t2t3Ratio": 1
"t1t3Ratio": 1
"t2": "googlefr"
"t2t3Ratio": 1
"t3Ratio": 1
}
{
"userAnswer": "google.fr"
"adminAnswers": "[\"bing\"]"
"t1": "google.fr"
"t1t2": "googlefr"
"t1t2t3Ratio": 0.875
"t1t3Ratio": 0.88
"t2": "googlefr"
"t2t3Ratio": 0.875
"t3Ratio": 0.88
}
],
"bad answer_num2": [
{
"userAnswer": "bad answer"
"adminAnswers": "[\"google\",\"google.fr\",\"google search\"]"
"t1": "badanswer"
"t1t2": "badanswer"
"t1t2t3Ratio": 0.88
"t1t3Ratio": 0.88
"t2": "bad answer"
"t2t3Ratio": 0.9
"t3Ratio": 0.9
}
{
"userAnswer": "bad answer"
"adminAnswers": "[\"yahoo\",\"yahoo answer\"]"
"t1": "badanswer"
"t1t2": "badanswer"
"t1t2t3Ratio": 0.55
"t1t3Ratio": 0.55
"t2": "bad answer"
"t2t3Ratio": 0.4
"t3Ratio": 0.4
}
{
"userAnswer": "bad answer"
"adminAnswers": "[\"bing\"]"
"t1": "badanswer"
"t1t2": "badanswer"
"t1t2t3Ratio": 0.77
"t1t3Ratio": 0.77
"t2": "bad answer"
"t2t3Ratio": 0.8
"t3Ratio": 0.8
}
],
"bad answer_num3": [
{
"userAnswer": "bad answer"
"adminAnswers": "[\"google\",\"google.fr\",\"google search\"]"
"t1": "badanswer"
"t1t2": "badanswer"
"t1t2t3Ratio": 0.88
"t1t3Ratio": 0.88
"t2": "bad answer"
"t2t3Ratio": 0.9
"t3Ratio": 0.9
}
{
"userAnswer": "bad answer"
"adminAnswers": "[\"yahoo\",\"yahoo answer\"]"
"t1": "badanswer"
"t1t2": "badanswer"
"t1t2t3Ratio": 0.55
"t1t3Ratio": 0.55
"t2": "bad answer"
"t2t3Ratio": 0.4
"t3Ratio": 0.4
}
{
"userAnswer": "bad answer"
"adminAnswers": "[\"bing\"]"
"t1": "badanswer"
"t1t2": "badanswer"
"t1t2t3Ratio": 0.77
"t1t3Ratio": 0.77
"t2": "bad answer"
"t2t3Ratio": 0.8
"t3Ratio": 0.8
}
]

}
------------------------------------------------ */
function _calculateValidation(answers, solutions) {

const validations = {};
Expand Down Expand Up @@ -223,15 +109,16 @@ module.exports = {

// Convert Yaml to JS objects
const answers = jsYaml.safeLoad(yamlAnswer);
let solutions = jsYaml.safeLoad(yamlSolution);
const solutions = jsYaml.safeLoad(yamlSolution);
const scoring = jsYaml.safeLoad(yamlScoring);


// We allow the admin to mistakenly enter uppercases and spaces before/after actual solution
solutions = _applyTreatmentsToSolutions(solutions);
const treatedSolutions = _applyTreatmentsToSolutions(solutions);
const treatedAnswers = _applyTreatmentsToAnswers(answers);

// Comparisons
const fullValidations = _calculateValidation(answers, solutions);
const fullValidations = _calculateValidation(treatedAnswers, treatedSolutions);

return _calculateResult(scoring, fullValidations);
}
Expand Down
22 changes: 11 additions & 11 deletions api/lib/domain/services/solution-service-qrocm-ind.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@ const jsYaml = require('js-yaml');
const _ = require('../../infrastructure/utils/lodash-utils');
const utils = require('./solution-service-utils');

/*
*
* solutions looks like :
*
* { '9lettres': [ 'courgette' ],
* '6lettres': [ 'tomate', 'chicon', 'legume' ] }
*
*/
function _applyTreatmentsToSolutions(solutions) {
return _.mapValues(solutions, (validSolutions) => {
return _.map(validSolutions, (validSolution) => {
return utils._treatmentT2(utils._treatmentT1(validSolution));
// toString() in case the admin entered number as solution,
// yaml converter may convert it into number and not string.
return utils._treatmentT2(utils._treatmentT1(validSolution.toString()));
});
});
}

function _applyTreatmentsToAnswers(answers) {
// toString() in case the user entered number as solution,
// yaml converter may convert it into number and not string.
return _.mapValues(answers, _.toString);
}


function _calculateResult(validations) {
let result = 'ok';
Expand Down Expand Up @@ -48,14 +48,14 @@ module.exports = {

//Pre - Treatment
const treatedSolutions = _applyTreatmentsToSolutions(solutions);
const treatedAnswers = _applyTreatmentsToAnswers(answers);

//Comparison
const validations = _.map(answers, function(answer, keyAnswer) {
const validations = _.map(treatedAnswers, function(answer, keyAnswer) {
const solutionsToAnswer = treatedSolutions[keyAnswer];
return utils.treatmentT1T2T3(answer, solutionsToAnswer);
});


//Restitution
return _calculateResult(validations);

Expand Down
10 changes: 10 additions & 0 deletions api/tests/unit/domain/services/solution-service_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,11 @@ describe('Unit | Service | SolutionService', function () {
answer: '9lettres: courgette\n6lettres: tomate',
solution: '9lettres:\n- courgette\n6lettres:\n- tomate\n- chicon\n- legume'
},
{
case: 'solution contains numbers',
answer: 'num1: 888\nnum2: 64',
solution: 'num1:\n- 888\nnum2:\n- 64'
},
{
case: 'leading/trailing spaces in solution',
answer: '9lettres: c o u r g e t t e\n6lettres: t o m a t e',
Expand Down Expand Up @@ -352,6 +357,11 @@ describe('Unit | Service | SolutionService', function () {
answer: 'num1: Google\nnum2: Yahoo',
solution: 'Google:\n- Google\nYahoo:\n- Yahoo'
},
{
when: 'Both answers are correct with 1 solution that contains only numbers',
answer: 'num1: 123\nnum2: 987',
solution: 'Google:\n- 987\nYahoo:\n- 123'
},
{
when: 'Both answers are correct with 2 solutions',
answer: 'num1: Google\nnum2: Yahoo',
Expand Down

0 comments on commit 8001ee1

Please sign in to comment.