51 lines
1.9 KiB
JavaScript
51 lines
1.9 KiB
JavaScript
/*
|
|
Les mécanismes sont testés dans mécanismes/ comme le sont les variables directement dans la base YAML.
|
|
On y créée dans chaque fichier une base YAML autonome, dans laquelle intervient le mécanisme à tester,
|
|
puis on teste idéalement tous ses comportements sans en faire intervenir d'autres.
|
|
*/
|
|
|
|
import {expect} from 'chai'
|
|
import {enrichRule} from '../source/engine/rules'
|
|
import {analyse, parseAll} from '../source/engine/traverse'
|
|
import {collectMissingVariables} from '../source/engine/generateQuestions'
|
|
import testSuites from './load-mecanism-tests'
|
|
import R from 'ramda'
|
|
|
|
// By luck this works as expected for both null and undefined, * but with different branches failing :O *
|
|
let isFloat = n => Number(n) === n && n % 1 !== 0
|
|
|
|
describe('Mécanismes', () =>
|
|
testSuites.map( suite =>
|
|
suite.map(({exemples, nom, test}) =>
|
|
exemples && describe(test || 'Nom de test (propriété "test") manquant dans la variable contenant ces "exemples"', () =>
|
|
exemples.map(({nom: testTexte, situation, 'valeur attendue': valeur, 'variables manquantes': expectedMissing}) =>
|
|
it(testTexte + '', () => {
|
|
|
|
let rules = parseAll(suite.map(enrichRule)),
|
|
state = situation || {},
|
|
stateSelector = name => state[name],
|
|
analysis = analyse(rules, nom)(stateSelector),
|
|
missing = collectMissingVariables(analysis.targets),
|
|
target = analysis.targets[0]
|
|
|
|
if (isFloat(valeur)) {
|
|
expect(target.nodeValue).to.be.closeTo(valeur,0.001)
|
|
}
|
|
else if (valeur !== undefined) {
|
|
expect(target)
|
|
.to.have.property(
|
|
'nodeValue',
|
|
valeur
|
|
)
|
|
}
|
|
|
|
if (expectedMissing) {
|
|
expect(R.keys(missing).sort()).to.eql(expectedMissing.sort())
|
|
}
|
|
|
|
})
|
|
)
|
|
))
|
|
)
|
|
)
|