2018-06-29 10:36:42 +00:00
|
|
|
import { expect } from 'chai'
|
|
|
|
import { enrichRule } from '../source/engine/rules'
|
2019-01-29 17:41:44 +00:00
|
|
|
import { analyseMany, parseAll } from '../source/engine/traverse'
|
2018-06-29 10:36:42 +00:00
|
|
|
|
|
|
|
describe('controls', function() {
|
|
|
|
let rawRules = [
|
|
|
|
{
|
|
|
|
nom: 'net',
|
|
|
|
formule: 'brut - cotisation'
|
|
|
|
},
|
|
|
|
{ nom: 'cotisation', formule: 235 },
|
2019-01-29 17:41:44 +00:00
|
|
|
{ nom: 'résident en France', formule: 'oui' },
|
2018-06-29 10:36:42 +00:00
|
|
|
{
|
|
|
|
nom: 'brut',
|
2019-07-05 13:00:24 +00:00
|
|
|
unité: '€',
|
2018-06-29 10:36:42 +00:00
|
|
|
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 !'
|
2019-01-29 17:41:44 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
si: {
|
|
|
|
'toutes ces conditions': ['brut > 1000000', 'résident en France']
|
|
|
|
},
|
|
|
|
niveau: 'information',
|
|
|
|
message: 'Vous êtes un contribuable hors-pair !'
|
2018-06-29 10:36:42 +00:00
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
rules = rawRules.map(enrichRule),
|
|
|
|
parsedRules = parseAll(rules)
|
|
|
|
|
|
|
|
it('Should parse blocking controls', function() {
|
2019-07-05 14:43:00 +00:00
|
|
|
let controls = Object.values(parsedRules).find(r => r.contrôles).contrôles
|
2018-06-29 10:36:42 +00:00
|
|
|
expect(
|
2019-02-12 14:59:01 +00:00
|
|
|
controls.filter(({ level }) => level == 'bloquant')
|
2018-06-29 10:36:42 +00:00
|
|
|
).to.have.lengthOf(2)
|
|
|
|
})
|
|
|
|
|
2019-01-29 17:41:44 +00:00
|
|
|
it('Should allow imbricated conditions', function() {
|
2019-03-04 13:21:15 +00:00
|
|
|
let controls = analyseMany(parsedRules, ['net'])(
|
|
|
|
dottedName => ({ brut: 2000000 }[dottedName])
|
|
|
|
).controls
|
2019-01-29 17:41:44 +00:00
|
|
|
expect(
|
|
|
|
controls.find(
|
|
|
|
({ message }) => message === 'Vous êtes un contribuable hors-pair !'
|
|
|
|
)
|
|
|
|
).to.exist
|
2019-03-04 13:21:15 +00:00
|
|
|
|
|
|
|
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
|
2019-01-29 17:41:44 +00:00
|
|
|
})
|
2018-06-29 10:36:42 +00:00
|
|
|
})
|