test(front): étend la couverture de 8 à 41 tests

Les fonctionnalités ajoutées récemment n'étaient couvertes par aucun test,
et deux utilitaires historiques ne l'avaient jamais été.

- statutMonitoring : bornes du seuil testées de part et d'autre, là où une
  confusion entre < et <= se verrait.
- dates : protège la correction du décalage de fuseau (toISOString basculait
  en UTC, le 1er janvier local devenait le 31 décembre). Les helpers sont
  sortis de Historique.jsx vers utils/dates.js, un fichier de composant ne
  pouvant pas exporter autre chose sans casser le rafraîchissement à chaud.
- exportToCSV : échappement des virgules, guillemets et sauts de ligne, et
  conservation du zéro, qui est falsy alors que « 0 erreur » est justement
  l'information utile. Cet utilitaire sert quatre écrans et n'avait aucun test.
- Dashboard : les menus ne proposent que les valeurs ayant des résultats, les
  catégories se restreignent au service choisi, et une catégorie devenue sans
  résultat est réinitialisée. Vérifié par mutation : casser la cascade fait
  bien échouer deux tests.
- Admin : création, modification pré-remplie, confirmation avant suppression,
  remontée du refus 409 de l'API, désactivation et non suppression d'un
  monitoring, affichage des libellés à la place des identifiants.

Corrige un défaut révélé par ces tests : referentielsConfig capturait les
fonctions de l'API à l'import, figeant l'implémentation. Elles sont désormais
résolues à l'appel, ce qui découple la configuration du module d'API.
This commit is contained in:
2026-08-15 15:02:00 +02:00
parent b5e4741178
commit af464cfcb7
8 changed files with 482 additions and 37 deletions
@@ -1,9 +1,7 @@
import {
createService, updateService, deleteService,
createCategorie, updateCategorie, deleteCategorie,
createContact, updateContact, deleteContact,
createMonitoring, updateMonitoring, desactiverMonitoring,
} from '../../services/api';
/* Les appels API sont référencés via l'espace de noms et résolus au moment de
l'appel, et non capturés à l'import : la configuration ne fige donc pas une
implémentation, ce qui la découple du module d'API. */
import * as api from '../../services/api';
/* Description déclarative des 4 référentiels administrables.
Les colonnes du tableau, les champs du formulaire et les appels API sont
@@ -31,9 +29,9 @@ export const REFERENTIELS = [
{ name: 'table_source', label: 'Table source', type: 'text', required: true },
{ name: 'bdd_source', label: 'Base source', type: 'text', required: true },
],
creer: createMonitoring,
modifier: updateMonitoring,
supprimer: desactiverMonitoring,
creer: body => api.createMonitoring(body),
modifier: (id, body) => api.updateMonitoring(id, body),
supprimer: id => api.desactiverMonitoring(id),
},
{
key: 'services',
@@ -42,9 +40,9 @@ export const REFERENTIELS = [
idField: 'id_service',
colonnes: [{ key: 'nom_service', label: 'Nom' }],
champs: [{ name: 'nom_service', label: 'Nom du service', type: 'text', required: true }],
creer: createService,
modifier: updateService,
supprimer: deleteService,
creer: body => api.createService(body),
modifier: (id, body) => api.updateService(id, body),
supprimer: id => api.deleteService(id),
},
{
key: 'categories',
@@ -53,9 +51,9 @@ export const REFERENTIELS = [
idField: 'id_categorie',
colonnes: [{ key: 'intitule_categorie', label: 'Nom' }],
champs: [{ name: 'intitule_categorie', label: 'Intitulé', type: 'text', required: true }],
creer: createCategorie,
modifier: updateCategorie,
supprimer: deleteCategorie,
creer: body => api.createCategorie(body),
modifier: (id, body) => api.updateCategorie(id, body),
supprimer: id => api.deleteCategorie(id),
},
{
key: 'contacts',
@@ -76,9 +74,9 @@ export const REFERENTIELS = [
{ name: 'mail', label: 'Email', type: 'email', required: true },
{ name: 'id_service', label: 'Service', type: 'select', options: 'services', required: true },
],
creer: createContact,
modifier: updateContact,
supprimer: deleteContact,
creer: body => api.createContact(body),
modifier: (id, body) => api.updateContact(id, body),
supprimer: id => api.deleteContact(id),
},
];