Skip to content

[parser] Better unit test support (and tests)(and fixes)

Matt requested to merge msimonin/l1p5-vuejs:dev/parser_test into main

Cet ensemble de modifications:

  • ajoute le support de test unitaires pour le téléversement de fichier
  • ajoute des tests unitaires pour l'import de bâtiments, missions, achats, matériel informatiques (reste à faire pour les autres modules)
  • corrige principalement
    • l'import des bâtiments (des systèmes de chauffages imaginaires étaient ajoutés ce qui bloquait l'édition de ceux ci)
    • la modification d'un objet dans le tableau du matériel informatique
    • la gestion des erreurs dans le /parsing/ du fichier (certaines erreurs étaient silencieuses)
    • la version d'axios(upgrade à la dernière version) et le code associé
  • le code de geocodage est désormais extrait, ce qui facilite les tests aussi

Quelques explications:

Pour pouvoir écrire des tests il fallait pouvoir extraire un maximum de code des composants Vue dans une bibliothèque javascript.

Le parsing était partiellement extrait dans la fonction utils/parser.ParseFile qui renvoie les lignes telle que parsée par papaParse. Or pour chaque module (Mission, Bâtiment ... ) il restait 2 traitement principaux qui était fait dans la fonction de rappel(callback) de chaque module. Ces traitements sont (1) la construction des objets (Travel, Purchase, Building...) à partir d'une ligne et (2) leur stockage dans le store.

Or pour (2) on ne peut pas vraiment extraire cela dans une bibliothèque car cela est très liée à VueJS (c'est ma compréhension). Reste qu'on peut extraire (1) ce qui permet de tester plus en profondeur le /parsing/, donc la logique était de repousser la frontière de ce qui est fait dans la bibliothèque javascript un peu plus loin et ne laisser que le stockage des objets dans les composants VueJS.

Donc schématiquement le /parsing/ se décompose en

fichier -> A [parseFile] -> ensemble de lignes -> B [traitement (1)] -> ensemble d'objets -> C [traitement (2)] stockage (ou autres)
traitement générique                           -> traitement spécifique au module         -> traitement spécifique de ce qu'on veut faire avec les objets

Donc en gros j'ai décidé de garder la structure de callback dans parseFile qui permet de traiter du code spécifique mais j'ai décidé de la couper en 2 parties (donc 2 callbacks au lieu d'un)

  • premier callback gère la transformation en objet specific à chaque module (ce sont les fonctions buildFromLines dans les modèles) et se voit passer un second callback
  • second callback qui va gérer la façon spécifique de traiter les objets une fois qu'ils sont créés.

l'avantage du coup d'avoir un second callback est qu'on peut s'en servir pour autre chose que stocker ... par exemple tester les objets qui sont alors créés par les étages d'avant ! (et la boucle est bouclée)

Donc conceptuellement la modification ajoute un niveau de callback.

Edited by Matt

Merge request reports