✅ Tests des expressions plus sérieux
On ne testait auparavant que la compatibilité d'une expression, mais pas le bon calcul lui-même.pull/478/head
parent
f4965108f8
commit
321b4a4cb2
|
@ -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",
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
})
|
||||
))
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
})
|
||||
))
|
||||
)
|
||||
))
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue