import { expect } from 'chai' import { enrichRule } from '../source/engine/rules' import { analyseMany, parseAll } from '../source/engine/traverse' describe('controls', function() { let rawRules = [ { nom: 'net', formule: 'brut - cotisation' }, { nom: 'cotisation', formule: 235 }, { nom: 'résident en France', formule: 'oui' }, { nom: 'brut', unité: '€', 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 !' }, { si: { 'toutes ces conditions': ['brut > 1000000', 'résident en France'] }, niveau: 'information', message: 'Vous êtes un contribuable hors-pair !' } ] } ], rules = rawRules.map(enrichRule), parsedRules = parseAll(rules) it('Should parse blocking controls', function() { let controls = Object.values(parsedRules).find(r => r.contrôles).contrôles expect( controls.filter(({ level }) => level == 'bloquant') ).to.have.lengthOf(2) }) it('Should allow imbricated conditions', function() { let controls = analyseMany(parsedRules, ['net'])( dottedName => ({ brut: 2000000 }[dottedName]) ).controls expect( controls.find( ({ message }) => message === 'Vous êtes un contribuable hors-pair !' ) ).to.exist let controls2 = analyseMany(parsedRules, ['net'])( dottedName => ({ brut: 100001 }[dottedName]) ).controls expect(controls2.find(({ message }) => message === 'Oulah ! Oulah !')).to .exist let controls3 = analyseMany(parsedRules, ['net'])( dottedName => ({ brut: 100 }[dottedName]) ).controls expect( controls3.find( ({ message }) => message === 'Malheureux, je crois que vous vous êtes trompé dans votre saisie.' ) ).to.exist }) })