/*
  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, AssertionError } from 'chai'
import { enrichRule, rules } 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'
import { runExamples, isFloat } from '../source/components/rule/Examples'

let parsedRules = parseAll(rules)
describe('Tests des règles de notre base de règles', () =>
	parsedRules.map(rule => {
		if (!rule.exemples) return null
		describe(rule.name, () => {
			let examples = runExamples(rule.exemples, rule, parsedRules)
			examples.map(example =>
				it(example.nom + '', () => {
					if (!example.ok)
						throw new AssertionError(`
              Valeur attendue : ${example['valeur attendue']}
              Valeur obtenue : ${example.rule.nodeValue}
            `)
				})
			)
		})
	}))