Piles : acquittements a cle courte groupes par date (255 caracteres)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env node
|
||||
import { lireAcquittements, pilesAAlerter } from '../../tools/piles.mjs';
|
||||
import { cleCourte, lireAcquittements, pilesAAlerter } from '../../tools/piles.mjs';
|
||||
const T = Date.parse('2026-10-10T00:30:00+02:00');
|
||||
const e = (entity_id, state, attrs = {}, last = '2026-10-09T22:00:00+02:00') => ({ entity_id, state, attributes: attrs, last_changed: last });
|
||||
// Extrait reel des etats HA du 10/10 00:30.
|
||||
@@ -32,12 +32,15 @@ ok('hysteresis-tient-a-25', pilesAAlerter(grenier(25), T, [], { precedentes: ['s
|
||||
ok('hysteresis-pas-de-nouvelle-a-25', pilesAAlerter(grenier(25), T, [], { precedentes: [] }).alertes.length === 0);
|
||||
ok('hysteresis-retombe-a-40', pilesAAlerter(grenier(40), T, [], { precedentes: ['sensor.salle_de_bain_bruz_batterie'] }).alertes.length === 0);
|
||||
// Acquittement : « vu, je change dans 3 jours » -> plus de rappel jusqu'a la date.
|
||||
const acq = lireAcquittements('salle_de_bain_bruz_batterie:2026-10-16, mauvais format, x:2026-13-99');
|
||||
const kG = cleCourte('sensor.salle_de_bain_bruz_batterie');
|
||||
const acq = lireAcquittements(`2026-10-16:${kG}|abcdef, mauvais format, 2026-10-12:zz`);
|
||||
const ra = pilesAAlerter(grenier(6), Date.parse('2026-10-14T09:00:00+02:00'), [], { acquittements: acq });
|
||||
ok('acquittee-pas-de-rappel', ra.alertes.length === 1 && ra.a_rappeler.length === 0 && ra.acquittees[0].jusqu_au === '2026-10-16' && /jusqu'au 16\/10/.test(ra.texte), JSON.stringify(ra));
|
||||
const rb = pilesAAlerter(grenier(6), Date.parse('2026-10-17T08:00:00+02:00'), [], { acquittements: acq });
|
||||
ok('acquittement-expire-rappel', rb.a_rappeler.length === 1 && rb.a_rappeler[0].cle === 'salle_de_bain_bruz_batterie');
|
||||
ok('acquittement-format-tolerant', Object.keys(acq).length === 1);
|
||||
ok('acquittement-expire-rappel', rb.a_rappeler.length === 1 && rb.a_rappeler[0].cle === kG && /^[0-9a-f]{6}$/.test(kG));
|
||||
ok('acquittement-format-tolerant', Object.keys(acq).length === 2 && acq[kG].jusquAu === '2026-10-16');
|
||||
// 9 alertes groupees sur une date : bien sous les 255 caracteres du helper.
|
||||
ok('format-groupe-tient-dans-255', `2026-10-20:${Array.from({ length: 9 }, (_, i) => cleCourte('sensor.x' + i)).join('|')}`.length < 80);
|
||||
const gerard = (v) => [{ entity_id: 'sensor.chambre_gerard_etat_batterie', state: v, last_changed: new Date(T).toISOString(), attributes: { device_class: 'enum', friendly_name: 'Chambre Gerard Etat batterie' } }];
|
||||
ok('enum-low-middle-tient', pilesAAlerter(gerard('middle'), T, [], { precedentes: ['sensor.chambre_gerard_etat_batterie'] }).alertes.length === 1
|
||||
&& pilesAAlerter(gerard('middle'), T, []).alertes.length === 0 && pilesAAlerter(gerard('high'), T, [], { precedentes: ['sensor.chambre_gerard_etat_batterie'] }).alertes.length === 0);
|
||||
|
||||
Reference in New Issue
Block a user