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

2.6 KiB

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.

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.

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 })
	})
})