1
0
Fork 0
mirror of https://github.com/betagouv/mon-entreprise synced 2025-02-09 00:35:00 +00:00
mon-entreprise/test/mecanisms.test.js
Maxime Quandalle 12ab3a3c4c Format objet pour les tests des mécanismes
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.
2020-01-13 11:12:11 +01:00

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