Le modèle front portait un alert_id texte, des value/threshold non nullables et ignorait metric et prediction_id, alors que l'API sérialise un entier, des flottants nullables et ces deux champs. Toute comparaison avec l'alert_id d'une recommandation échouait silencieusement. - alert.model.ts : alert_id number, value/threshold/metric/prediction_id nullables - alerts.service.ts : getAlerts(filters) pose site_id et severity en HttpParams, les deux filtres que l'API accepte - alerts.fixture.ts : réaligné sur le contrat (ids entiers, horodatages UTC, champs nuls sur outage/sensor, un cas spike) - alert-presentation.ts : tons, libellés et unités partagés ; low passe en neutre, le vert se lisait comme un état sain
38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import {
|
|
LIBELLE_PAR_SEVERITE,
|
|
LIBELLE_PAR_TYPE,
|
|
SEVERITES,
|
|
TON_PAR_SEVERITE,
|
|
TYPES_ALERTE,
|
|
UNITE_PAR_METRIQUE,
|
|
} from './alert-presentation';
|
|
|
|
describe('alert-presentation', () => {
|
|
it('distingue le ton des sévérités high et critical', () => {
|
|
expect(TON_PAR_SEVERITE.high).toBe('danger');
|
|
expect(TON_PAR_SEVERITE.critical).toBe('critical');
|
|
expect(TON_PAR_SEVERITE.high).not.toBe(TON_PAR_SEVERITE.critical);
|
|
});
|
|
|
|
it("n'affiche pas une alerte faible avec le ton de succès", () => {
|
|
expect(TON_PAR_SEVERITE.low).toBe('neutral');
|
|
expect(TON_PAR_SEVERITE.medium).toBe('warning');
|
|
});
|
|
|
|
it('donne un libellé français à chaque sévérité et à chaque type', () => {
|
|
for (const severite of SEVERITES) {
|
|
expect(LIBELLE_PAR_SEVERITE[severite]).toBeTruthy();
|
|
}
|
|
for (const type of TYPES_ALERTE) {
|
|
expect(LIBELLE_PAR_TYPE[type]).toBeTruthy();
|
|
}
|
|
expect(SEVERITES.length).toBe(4);
|
|
expect(TYPES_ALERTE.length).toBe(5);
|
|
});
|
|
|
|
it('associe une unité à chaque métrique du contrat', () => {
|
|
expect(UNITE_PAR_METRIQUE.consumption_kw).toBe('kW');
|
|
expect(UNITE_PAR_METRIQUE.consumption_kwh).toBe('kWh');
|
|
});
|
|
});
|