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 }) })