mapping-geojson-osm/docs/testing.md
2024-07-08 11:27:27 +02:00

65 lines
2.6 KiB
Markdown

# Tests
Les tests sont lancés avec Jest et sont à écrire dans le dossier "tests", par défaut le runner est en mode auto rechargement des tests à la modification des fichiers.
`npm run test`
Ils fonctionnent avec des jeux de données qui se trouvent dans tests/data et des convertisseurs placés dans mappings/converters.
## Jeu de données
Le json de test disponible par défaut est un Geojson de type FeatureCollection dans testing.json
Les tests consistent à examiner les propriétés de chaque Feature Point et à les convertir selon les règles du Mapper de test.
## Mappers de test
Chaque test a à sa disposition plusieurs Mappers dans `mappings_to_test.ts` qui étendent `MappingConfigType` et peuvent s'appliquer à plusieurs jeux de données pour en tester la sortie.
- mappingPhone
- mappingRemoveAll
- mappingBoolean
- mappingName
- mappingSame
- mappingTruthy
- mappingFalsy
- mappingIgnoreFalsy
- mappingIgnoreTruthy
Leur objectif est de valider la qualité de conversion de données dans de multiples cas, et de vérifier que l'on ajoutera rien qui s'éloigne trop de ce que l'on peut deviner d'une valeur non fiable.
## Exemple de Mapper
Ce mappeur va appliquer la fonction de conversion de numéro de téléphone au format réglementaire pour les valeurs de tag "phone" selon la documentation du wiki OSM. C'est à dire que le numéro doit avoir un préfixe international (+33 pour la France) et avoir des espaces entre groupes de 2 chiffres.
```js
export const mappingPhone: MappingConfigType = {
config_name: 'testing config mappingPhone',
config_author: 'tykayn <contact@cipherbliss.com>',
default_properties_of_point: {},
tags: {
telephone_operateur: {
key_converted: 'phone',
convert_to_phone: true, // convertit en yes ou no
},
},
add_not_mapped_tags_too: false,
source: {},
filters: {},
}
```
# Écriture de tests
Pour réaliser les tests on importe l'Engine, le jeu de tests, on donne un Mapping à l'Engine, on applique la fonction de mapping, et on compare les propriétés obtenues à ce que l'on attend de la conversion.
```js
import mapping_engine from '../mappings/engine.ts'
import {
mappingPhone,
} from './data/mappings_to_test'
const testingGeoJson = require('./data/testing.json')
describe('mapping properties with rich mapping engine', () => {
test('conditional phone transform', () => {
let Mapping_engine = new mapping_engine(mappingPhone)
let mapped_point = Mapping_engine.mapElementFromConf(feature_to_test)
let expected_converted_phone = '+33 1 23 45 67 89'
expect(mapped_point.properties).toStrictEqual({ phone: expected_converted_phone })
})
})
```