import { expect } from 'chai'
import Engine from '../source/index'
import co2 from './rules/co2.yaml'

describe('library', function() {
	it('should let the user define its own rule', function() {
		let rules = `
yo:
  formule: 200
ya:
  formule:  yo + 1
yi:
  formule:  yo + 2
`
		let engine = new Engine(rules)

		expect(engine.evaluate('ya').nodeValue).to.equal(201)
		expect(engine.evaluate('yi').nodeValue).to.equal(202)
	})

	it('should let the user define a simplified revenue tax system', function() {
		let rules = `
revenu imposable:
  question: Quel est votre revenu imposable ?
  unité: €

revenu abattu:
  formule:
    allègement:
      assiette: revenu imposable
      abattement: 10%

impôt sur le revenu:
  formule:
    barème:
      assiette: revenu abattu
      tranches:
        - taux: 0%
          plafond: 9807 €
        - taux: 14%
          plafond: 27086 €
        - taux: 30%
          plafond: 72617 €
        - taux: 41%
          plafond: 153783 €
        - taux: 45%

impôt sur le revenu à payer:
  formule:
    allègement:
      assiette: impôt sur le revenu
      décote:
        taux: 75%
        plafond: 1177
`

		let engine = new Engine(rules)
		engine.setSituation({
			'revenu imposable': '48000'
		})
		let value = engine.evaluate('impôt sur le revenu à payer')
		expect(value.nodeValue).to.equal(7253.26)
	})

	it('should let the user define a rule base on a completely different subject', function() {
		let engine = new Engine(co2)
		engine.setSituation({
			'nombre de douches': 30,
			'chauffage . type': "'gaz'",
			'durée de la douche': 10
		})
		let value = engine.evaluate('douche . impact')
		expect(value.nodeValue).to.be.within(20, 21)
	})
})