diff --git a/package.json b/package.json index 03aa0e593..eba151a07 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "test-one": "yarn mocha-webpack --webpack-config source/webpack.test.js --require source-map-support/register --include componentTestSetup.js --require mock-local-storage --require test/helpers/browser.js", "test-components": "mocha-webpack --webpack-config source/webpack.test.js --require source-map-support/register --include componentTestSetup.js --require mock-local-storage ---require test/helpers/browser.js \"source/components/**/*.test.js\" --watch", "test-lib": "yarn test-common --grep 'library'", - "test-expressions": "yarn test-common --grep 'Expressions'", + "test-expressions": "yarn test-common --grep 'Suite expressions'", "compile-lib": "yarn webpack --config source/webpack.lib.js", "compile-dev": "FR_SITE='http://localhost:5000${path}' EN_SITE='http://localhost:5001${path}' yarn run compile", "mon-entreprise:serve": "PORT=5000 serve --config serve.mon-entreprise.json", diff --git a/test/expressions.test.js b/test/expressions.test.js deleted file mode 100644 index 750f48305..000000000 --- a/test/expressions.test.js +++ /dev/null @@ -1,33 +0,0 @@ -import { expect } from 'chai' -import { enrichRule } from '../source/engine/rules' -import { analyse, parseAll } from '../source/engine/traverse' -import { collectMissingVariables } from '../source/engine/generateQuestions' -import * as R from 'ramda' -import { isNumeric } from '../source/utils' -import expressions from './expressions.yaml' -import { nearley } from 'Engine/treat' - -describe('Expressions', () => - expressions.map(expression => - it(expression, () => { - let result = nearley().feed(expression).results - - expect(result).to.not.be.empty - - return null - //TODO - - let [parseResult, ...additionnalResults] = result - - if ( - additionnalResults && - additionnalResults.length > 0 && - parseResult.category !== 'boolean' - ) { - expect(target.nodeValue).to.be.closeTo(valeur, 0.001) - expect(target).to.have.property('nodeValue', valeur) - - expect(missing).to.eql(expectedMissing) - } - }) - )) diff --git a/test/expressions.yaml b/test/expressions.yaml deleted file mode 100644 index 0a9ab6ad0..000000000 --- a/test/expressions.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# A list of leaf expressions treated by our Nearley.js grammar -# For the moment, we just check if those are recognized - -# CalcExpression -- salaire de base * 3 - -- Salariat . salaire de base * 3 - -- 1 - taux -- salaire + 2000 - -# not working yet -# - salaire de base * 3 * 12 -- congés non pris / 25 - -# Comparison -- salaire de base < 4000 -- salaire de base < plafond sécurité sociale -- salaire de base < 4 * plafond sécurité sociale - -# BooleanVariableExpression -- Salariat . CDD . événements . CDD poursuivi en CDD -- ≠ événements . CDD poursuivi en CDD - -# ModifedVariable -# - salaire de base (> annuel) -# - salaire de base --> annuel -# - salaire de base annuel -- salaire de base [annuel] - -- 0.1% - -- entreprise . catégorie d'activité = 'artisanale' - -- 11.5% * plafond sécurité sociale temps plein diff --git a/test/load-mecanism-tests.js b/test/load-mecanism-tests.js index 94903cb35..3d49ef07f 100644 --- a/test/load-mecanism-tests.js +++ b/test/load-mecanism-tests.js @@ -1,7 +1,7 @@ -import R from 'ramda' - let directoryLoaderFunction = require.context('./mécanismes', true, /.yaml$/) -let items = directoryLoaderFunction.keys().map(directoryLoaderFunction) +let items = directoryLoaderFunction + .keys() + .map(key => [key.replace(/\.\/|\.yaml/g, ''), directoryLoaderFunction(key)]) export default items diff --git a/test/mecanisms.test.js b/test/mecanisms.test.js index 1433d56b7..c4a6a3089 100644 --- a/test/mecanisms.test.js +++ b/test/mecanisms.test.js @@ -13,49 +13,45 @@ import * as R from 'ramda' import { isNumeric } from '../source/utils' describe('Mécanismes', () => - testSuites.map(suite => + testSuites.map(([suiteName, suite]) => suite.map( ({ exemples, test }) => exemples && - describe( - test || - 'Nom de test (propriété "test") manquant dans la variable contenant ces "exemples"', - () => - exemples.map( - ({ - nom: testTexte, - situation, - 'valeur attendue': valeur, - 'variables manquantes': expectedMissing - }) => - it(testTexte == null ? '' : testTexte + '', () => { - let rules = parseAll( - suite - .map( - item => - item.test != null - ? R.assoc('nom', item.test, item) - : item - ) - .map(enrichRule) - ), - state = situation || {}, - stateSelector = name => state[name], - analysis = analyse(rules, test)(stateSelector), - missing = collectMissingVariables(analysis.targets), - target = analysis.targets[0] + describe(`Suite ${suiteName}, test : ${test || + 'Nom de test (propriété "test") manquant dans la variable contenant ces "exemples"'}`, () => + exemples.map( + ({ + nom: testTexte, + situation, + 'valeur attendue': valeur, + 'variables manquantes': expectedMissing + }) => + it(testTexte == null ? '' : testTexte + '', () => { + let rules = parseAll( + suite + .map(item => + item.test != null + ? R.assoc('nom', item.test, item) + : item + ) + .map(enrichRule) + ), + state = situation || {}, + stateSelector = name => state[name], + analysis = analyse(rules, test)(stateSelector), + missing = collectMissingVariables(analysis.targets), + target = analysis.targets[0] - if (isNumeric(valeur)) { - expect(target.nodeValue).to.be.closeTo(valeur, 0.001) - } else if (valeur !== undefined) { - expect(target).to.have.property('nodeValue', valeur) - } + if (isNumeric(valeur)) { + 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 (expectedMissing) { + expect(missing).to.eql(expectedMissing) + } + }) + )) ) )) diff --git a/test/mécanismes/expressions.yaml b/test/mécanismes/expressions.yaml new file mode 100644 index 000000000..c5f1285ac --- /dev/null +++ b/test/mécanismes/expressions.yaml @@ -0,0 +1,166 @@ +- nom: salaire de base +- nom: contrat . salaire de base + +- test: multiplication + formule: salaire de base * 3 + exemples: + - situation: + salaire de base: 1000 + valeur attendue: 3000 + +- test: multiplication et variable avec espace + formule: contrat . salaire de base * 3 + exemples: + - situation: + contrat . salaire de base: 1000 + valeur attendue: 3000 + +- nom: taux + +- test: soustraction + formule: 1 - taux + exemples: + - situation: + taux: 0.89 + valeur attendue: 0.11 + +- test: addition + formule: salaire de base + 2000 + exemples: + - situation: + salaire de base: 3000 + valeur attendue: 5000 + +- nom: revenus fonciers + +- test: addition bis + formule: salaire de base + revenus fonciers + exemples: + - situation: + salaire de base: 3000 + revenus fonciers: 2000 + valeur attendue: 5000 + +- test: division + formule: salaire de base / 3 + exemples: + - situation: + salaire de base: 3000 + valeur attendue: 1000 + +- test: comparaison stricte + formule: salaire de base < 3001 + exemples: + - nom: inférieur + situation: + salaire de base: 3000 + valeur attendue: true + - nom: égal + situation: + salaire de base: 3001 + valeur attendue: false + - nom: supérieur + situation: + salaire de base: 3002 + valeur attendue: false + +- test: comparaison non stricte + formule: salaire de base <= 3000 + exemples: + - nom: inférieur + situation: + salaire de base: 2999.999 + valeur attendue: true + - nom: égal + situation: + salaire de base: 3000 + valeur attendue: true + - nom: supérieur + situation: + salaire de base: 3000.1 + valeur attendue: false + +- nom: plafond sécurité sociale + +- nom: CDD + +- espace: CDD + nom: poursuivi en CDI + +- test: booléen + formule: CDD . poursuivi en CDI + exemples: + - situation: + CDD . poursuivi en CDI: oui + valeur attendue: true + - situation: + CDD . poursuivi en CDI: non + valeur attendue: false + +- test: négation + formule: ≠ CDD . poursuivi en CDI + exemples: + - situation: + CDD . poursuivi en CDI: oui + valeur attendue: false + - situation: + CDD . poursuivi en CDI: non + valeur attendue: true + +- test: pourcentage + formule: 38.1% + exemples: + - valeur attendue: 0.381 + #- test: variable modifiée temporellement + +- test: multiplication et pourcentage + formule: 38.1% * salaire de base + exemples: + - situation: + salaire de base: 1000 + valeur attendue: 381 + +- nom: catégorie d'activité + formule: + une possibilité: + - commerciale + - artisanale + +- espace: catégorie d'activité + nom: artisanale +- espace: catégorie d'activité + nom: commerciale + +- test: test de possibilités + formule: catégorie d'activité = 'artisanale' + exemples: + - situation: + catégorie d'activité: artisanale + valeur attendue: true + - situation: + catégorie d'activité: commerciale + valeur attendue: false + +- nom: revenu + période: mois + format: € + +- test: variable modifiée temporellement + formule: revenu [annuel] + exemples: + - situation: + revenu: 1000 + valeur attendue: 12000 +############## +# Hors limite aujourd'hui + +#- test: opérations multiples +# formule: 4 * plafond sécurité sociale * 12 +# +#- test: comparaison et opération +# formule: salaire de base < 4 * plafond sécurité sociale +# exemples: +# - situation: +# salaire de base: 1000 +# plafond sécurité sociale: 3500 +# valeur attendue: true