import { map } from 'ramda' import { expect } from 'chai' import { rules, enrichRule, translateAll, nestedSituationToPathMap } from '../source/engine/rules' let stateSelector = (state, name) => null describe('enrichRule', function() { it('should extract the type of the rule', function() { let rule = { nom: 'retraite', cotisation: {} } expect(enrichRule(rule)).to.have.property('type', 'cotisation') }) it('should load external data into the rule', function() { let data = { taux_versement_transport: { one: 'two' } } let rule = { nom: 'retraite', cotisation: {}, données: 'taux_versement_transport' } expect(enrichRule(rule, data)).to.have.deep.property('data', { one: 'two' }) }) it('should extract the dotted name of the rule', function() { let rule = { espace: 'contrat salarié', nom: 'CDD' } expect(enrichRule(rule)).to.have.property('name', 'CDD') expect(enrichRule(rule)).to.have.property( 'dottedName', 'contrat salarié . CDD' ) }) it('should render Markdown in sub-questions', function() { let rule = { nom: 'quoi', 'sous-question': '**wut**' } expect(enrichRule(rule)).to.have.property( 'subquestion', '
wut
\n' ) }) }) describe('rule checks', function() { it('most input rules should have defaults', function() { let rulesNeedingDefault = rules.filter( r => r.espace && !r.simulateur && (!r.formule || r.formule['une possibilité']) && r.defaultValue == null && r.question ) rulesNeedingDefault.map(r => console.log( 'cette règle, ', r.dottedName, 'devrait avoir une valeur par défaut' ) ) expect(rulesNeedingDefault).to.be.empty }) }) it('rules with a formula should not have defaults', function() { let errors = rules.filter( r => r.formule !== undefined && !r.formule['une possibilité'] && r.defaultValue !== undefined ) // variant formulas are an exception, their implementation is to refactor TODO expect(errors).to.be.empty }) describe('translateAll', function() { it('should translate flat rules', function() { let rules = [ { espace: 'foo', nom: 'bar', titre: 'Titre', description: 'Description', question: 'Question', 'sous-question': 'Sous Question' } ] let translations = { 'foo . bar': { 'titre.en': 'TITRE', 'description.en': 'DESC', 'question.en': 'QUEST', 'sous-question.en': 'SOUSQ' } } let result = translateAll(translations, map(enrichRule, rules)) expect(result[0]).to.have.property('titre', 'TITRE') expect(result[0]).to.have.property('description', 'DESC') expect(result[0]).to.have.property('question', 'QUEST') expect(result[0]).to.have.property('sous-question', 'SOUSQ') }) }) describe('misc', function() { it('should unnest nested form values', function() { let values = { 'contrat salarié': { salaire: { 'brut de base': '2300' } } } let pathMap = nestedSituationToPathMap(values) expect(pathMap).to.have.property( 'contrat salarié . salaire . brut de base', '2300' ) }) })