From 94db43c0bf207edf05f585c6a33d170dc5162cc1 Mon Sep 17 00:00:00 2001 From: Mael Date: Fri, 29 Jun 2018 10:36:42 +0000 Subject: [PATCH] :white_check_mark: Test des controles bloquants --- source/engine/traverse.js | 22 +++++++----- test/contrôles.test.js | 70 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 test/contrôles.test.js diff --git a/source/engine/traverse.js b/source/engine/traverse.js index 1798ead71..bdf89413a 100644 --- a/source/engine/traverse.js +++ b/source/engine/traverse.js @@ -193,20 +193,24 @@ export let treatRuleRoot = (rules, rule) => { } })(rule) - let evaluateControl = () => { - let controls = rule['contrôles'] - if (!controls) return null - //parse Expression - //test if cited variable is this - //evaluate with situation - //return message or null - } + // let evaluateControl = () => { + //evaluate with situation + //return message or null + //} + let controls = + rule['contrôles'] && + rule['contrôles'].map(control => { + let testExpression = treatString(rules, rule)(control.si) + console.log(testExpression) + return { ...control, testExpression } + }) return { // Pas de propriété explanation et jsx ici car on est parti du (mauvais) principe que 'non applicable si' et 'formule' sont particuliers, alors qu'ils pourraient être rangé avec les autres mécanismes ...parsedRoot, evaluate, - parsed: true + parsed: true, + controls } } diff --git a/test/contrôles.test.js b/test/contrôles.test.js new file mode 100644 index 000000000..00ee04e62 --- /dev/null +++ b/test/contrôles.test.js @@ -0,0 +1,70 @@ +import { expect } from 'chai' +import { enrichRule } from '../source/engine/rules' +import { parseAll, analyseMany } from '../source/engine/traverse' + +describe('controls', function() { + let rawRules = [ + { + nom: 'net', + formule: 'brut - cotisation' + }, + { nom: 'cotisation', formule: 235 }, + { + nom: 'brut', + format: 'euro', + question: 'Quel est le salaire brut ?', + contrôles: [ + { + si: 'brut < 300', + niveau: 'bloquant', + message: + 'Malheureux, je crois que vous vous êtes trompé dans votre saisie.' + }, + { + si: 'brut < 1000', + niveau: 'bloquant', + message: 'Toujours pas, nous avons des standards en France !' + }, + + { + si: 'brut < 1500', + niveau: 'avertissement', + message: 'Toujours pas, nous avons des standards en France !' + }, + { + si: 'brut > 100000', + niveau: 'information', + message: 'Oulah ! Oulah !' + } + ] + } + ], + rules = rawRules.map(enrichRule), + parsedRules = parseAll(rules) + + it('Should parse blocking controls', function() { + let controls = parsedRules.find(r => r.controls).controls + expect( + controls.filter( + ({ level, isInputControl }) => level == 'bloquant' && isInputControl + ) + ).to.have.lengthOf(2) + }) + + it('Should block the engine evaluation if blocking input controls trigger', function() { + let situationGate = dottedName => ({ brut: 400 }[dottedName]), + { blockingInputControls } = analyseMany(parsedRules, ['net'])( + situationGate + ) + + expect(blockingInputControls).to.have.lengthOf(1) + }) + it('Should not block the engine evaluation if no blocking input controls trigger', function() { + let situationGate = dottedName => ({ brut: 1200 }[dottedName]), + { blockingInputControls } = analyseMany(parsedRules, ['net'])( + situationGate + ) + + expect(blockingInputControls).to.be.undefined + }) +})