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.
88 lines
3.7 KiB
JavaScript
88 lines
3.7 KiB
JavaScript
/* 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
|
|
décrits ici plutôt que répétés onglet par onglet : les 4 onglets partagent
|
|
ainsi un seul tableau et un seul formulaire. */
|
|
export const REFERENTIELS = [
|
|
{
|
|
key: 'monitorings',
|
|
label: 'Monitorings',
|
|
singulier: 'monitoring',
|
|
idField: 'id_monito',
|
|
/* Désactivation logique : TABLE_FINAL référence le monitoring. */
|
|
suppressionEstDesactivation: true,
|
|
colonnes: [
|
|
{ key: 'monito_intitule', label: 'Nom' },
|
|
{ key: 'id_service', label: 'Service', referentiel: 'services' },
|
|
{ key: 'id_categorie', label: 'Catégorie', referentiel: 'categories' },
|
|
{ key: 'bdd_source', label: 'Source' },
|
|
{ key: 'table_source', label: 'Table' },
|
|
],
|
|
champs: [
|
|
{ name: 'monito_intitule', label: 'Nom', type: 'text', required: true },
|
|
{ name: 'id_service', label: 'Service', type: 'select', options: 'services', required: true },
|
|
{ name: 'id_categorie', label: 'Catégorie', type: 'select', options: 'categories', required: true },
|
|
{ name: 'table_source', label: 'Table source', type: 'text', required: true },
|
|
{ name: 'bdd_source', label: 'Base source', type: 'text', required: true },
|
|
],
|
|
creer: body => api.createMonitoring(body),
|
|
modifier: (id, body) => api.updateMonitoring(id, body),
|
|
supprimer: id => api.desactiverMonitoring(id),
|
|
},
|
|
{
|
|
key: 'services',
|
|
label: 'Services',
|
|
singulier: 'service',
|
|
idField: 'id_service',
|
|
colonnes: [{ key: 'nom_service', label: 'Nom' }],
|
|
champs: [{ name: 'nom_service', label: 'Nom du service', type: 'text', required: true }],
|
|
creer: body => api.createService(body),
|
|
modifier: (id, body) => api.updateService(id, body),
|
|
supprimer: id => api.deleteService(id),
|
|
},
|
|
{
|
|
key: 'categories',
|
|
label: 'Catégories',
|
|
singulier: 'catégorie',
|
|
idField: 'id_categorie',
|
|
colonnes: [{ key: 'intitule_categorie', label: 'Nom' }],
|
|
champs: [{ name: 'intitule_categorie', label: 'Intitulé', type: 'text', required: true }],
|
|
creer: body => api.createCategorie(body),
|
|
modifier: (id, body) => api.updateCategorie(id, body),
|
|
supprimer: id => api.deleteCategorie(id),
|
|
},
|
|
{
|
|
key: 'contacts',
|
|
label: 'Contacts',
|
|
singulier: 'contact',
|
|
idField: 'id_contact',
|
|
colonnes: [
|
|
{ key: 'intitule_contact', label: 'Intitulé' },
|
|
{ key: 'nom', label: 'Nom' },
|
|
{ key: 'prenom', label: 'Prénom' },
|
|
{ key: 'mail', label: 'Email' },
|
|
{ key: 'id_service', label: 'Service', referentiel: 'services' },
|
|
],
|
|
champs: [
|
|
{ name: 'intitule_contact', label: 'Intitulé', type: 'text', required: true },
|
|
{ name: 'nom', label: 'Nom', type: 'text', required: true },
|
|
{ name: 'prenom', label: 'Prénom', type: 'text', required: true },
|
|
{ name: 'mail', label: 'Email', type: 'email', required: true },
|
|
{ name: 'id_service', label: 'Service', type: 'select', options: 'services', required: true },
|
|
],
|
|
creer: body => api.createContact(body),
|
|
modifier: (id, body) => api.updateContact(id, body),
|
|
supprimer: id => api.deleteContact(id),
|
|
},
|
|
];
|
|
|
|
/* Libellés des listes déroulantes et des colonnes qui affichent un identifiant. */
|
|
export const LIBELLES_REFERENTIEL = {
|
|
services: { idField: 'id_service', labelField: 'nom_service' },
|
|
categories: { idField: 'id_categorie', labelField: 'intitule_categorie' },
|
|
};
|