fix(alarmas): scope schedule-skip exceptions to skipNext only
ExcepcionAlarma._esValida matched ANY exception tipo against an occurrence, treating it as a user skip. Only the 'skipNext' tipo existed until now, but the next commits reuse the same model to record scheduling-reliability failures per alarm (so the alarms list can surface them via ultimaExcepcionPara) -- without this guard, a recorded failure would be silently treated as if the user asked to skip that occurrence, corrupting scheduling. Adds tipo constants to ExcepcionAlarma for the upcoming failure kinds.
This commit is contained in:
@@ -75,6 +75,42 @@ void main() {
|
||||
expect(proxima, DateTime(2026, 5, 23, 9));
|
||||
});
|
||||
|
||||
test(
|
||||
'un registro de fallo de programacion NO omite esa ejecucion (solo '
|
||||
'skipNext debe hacerlo)',
|
||||
() {
|
||||
final alarma = AlarmaMusical(
|
||||
id: 'a4',
|
||||
nombre: 'Diaria',
|
||||
hora: 9,
|
||||
minuto: 0,
|
||||
tipoProgramacion: TipoProgramacionAlarma.diaria,
|
||||
diasSemana: const [],
|
||||
);
|
||||
final ocurrencia = DateTime(2026, 5, 22, 9);
|
||||
|
||||
final proxima = servicio.calcularProxima(
|
||||
alarma: alarma,
|
||||
desde: DateTime(2026, 5, 22, 8),
|
||||
excepciones: [
|
||||
ExcepcionAlarma(
|
||||
alarmaId: 'a4',
|
||||
ejecucion: ocurrencia,
|
||||
tipo: ExcepcionAlarma.tipoFalloProgramacion,
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
expect(
|
||||
proxima,
|
||||
ocurrencia,
|
||||
reason:
|
||||
'un fallo de programacion registrado no debe comportarse '
|
||||
'como un salto de usuario',
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
test('snooze solo permite 3, 5 o 10 minutos y cae a 5', () {
|
||||
expect(
|
||||
servicio.calcularSnooze(DateTime(2026, 5, 21, 7), 10),
|
||||
|
||||
Reference in New Issue
Block a user