mirror of
https://github.com/betagouv/mon-entreprise
synced 2025-02-09 00:35:00 +00:00
Dans #719 nous changions la structure de données Yaml de premier niveau d'une liste vers un objet (indexé sur le nom des règles) pour les fichiers Publicode. Ce commit réplique ce changement pour les fichiers de tests de mécanismes qui n'avaient pas encore été migré vers le nouveau format. L'attribut "test" qui servait à définir le nom du test est supprimé et on utilise maintenant directement le nom de la règle (ou son titre s'il est défini) comme nom du test.
66 lines
2.2 KiB
JavaScript
66 lines
2.2 KiB
JavaScript
/*
|
|
Les mécanismes sont testés dans mécanismes/ comme le sont les variables directement dans la base YAML.
|
|
On construit 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 { serialiseUnit } from 'Engine/units'
|
|
import { collectMissingVariables } from '../source/engine/generateQuestions'
|
|
import { enrichRule } from '../source/engine/rules'
|
|
import { analyse, parseAll } from '../source/engine/traverse'
|
|
import testSuites from './load-mecanism-tests'
|
|
|
|
describe('Mécanismes', () =>
|
|
testSuites.map(([suiteName, suite]) =>
|
|
Object.keys(suite)
|
|
.map(key => [key, suite[key] ?? undefined])
|
|
.map(
|
|
([name, { exemples, titre, 'unité attendue': unit } = {}]) =>
|
|
exemples &&
|
|
describe(`Suite ${suiteName}, test : ${titre ?? name}`, () =>
|
|
exemples.map(
|
|
({
|
|
nom: testTexte,
|
|
situation,
|
|
'unités par défaut': defaultUnits,
|
|
'valeur attendue': valeur,
|
|
'variables manquantes': expectedMissing
|
|
}) =>
|
|
it(testTexte == null ? '' : testTexte + '', () => {
|
|
let rules = parseAll(
|
|
Object.entries(suite)
|
|
.map(([dottedName, rule]) => ({
|
|
dottedName,
|
|
...rule
|
|
}))
|
|
.map(enrichRule)
|
|
),
|
|
state = situation || {},
|
|
stateSelector = name => state[name],
|
|
analysis = analyse(
|
|
rules,
|
|
name,
|
|
defaultUnits
|
|
)(stateSelector),
|
|
missing = collectMissingVariables(analysis.targets),
|
|
target = analysis.targets[0]
|
|
|
|
if (typeof valeur === 'number') {
|
|
expect(target.nodeValue).to.be.closeTo(valeur, 0.001)
|
|
} else if (valeur !== undefined) {
|
|
expect(target).to.have.property('nodeValue', valeur)
|
|
}
|
|
|
|
if (expectedMissing) {
|
|
expect(missing).to.eql(expectedMissing)
|
|
}
|
|
|
|
if (unit) {
|
|
expect(target.unit).not.to.be.equal(undefined)
|
|
expect(serialiseUnit(target.unit)).to.eql(unit)
|
|
}
|
|
})
|
|
))
|
|
)
|
|
))
|