feat(alarm): add musical alarm foundation
Build & Deploy Pluriwave / Análisis de código (push) Successful in 14s
Build & Deploy Pluriwave / Build APK + AAB release (push) Successful in 2m45s

This commit is contained in:
2026-05-21 23:46:52 +02:00
parent 8c2cba093c
commit fb808ebb60
30 changed files with 1437 additions and 43 deletions
@@ -0,0 +1,87 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:pluriwave/modelos/alarma_musical.dart';
import 'package:pluriwave/servicios/servicio_programacion_alarmas.dart';
void main() {
group('ServicioProgramacionAlarmas', () {
final servicio = ServicioProgramacionAlarmas();
test('calcula la próxima alarma diaria futura', () {
final alarma = AlarmaMusical(
id: 'a1',
nombre: 'Diaria',
hora: 7,
minuto: 30,
tipoProgramacion: TipoProgramacionAlarma.diaria,
diasSemana: const [],
);
final proxima = servicio.calcularProxima(
alarma: alarma,
desde: DateTime(2026, 5, 21, 7),
);
expect(proxima, DateTime(2026, 5, 21, 7, 30));
});
test('salta vacaciones si la alarma no debe sonar esos días', () {
final alarma = AlarmaMusical(
id: 'a2',
nombre: 'Laboral',
hora: 8,
minuto: 0,
tipoProgramacion: TipoProgramacionAlarma.diaria,
diasSemana: const [],
sonarEnVacaciones: false,
);
final proxima = servicio.calcularProxima(
alarma: alarma,
desde: DateTime(2026, 8, 1, 7),
vacaciones: [
RangoVacaciones(
id: 'v1',
nombre: 'Verano',
inicio: DateTime(2026, 8),
fin: DateTime(2026, 8, 3),
),
],
);
expect(proxima, DateTime(2026, 8, 4, 8));
});
test('saltar próxima solo omite esa ejecución', () {
final alarma = AlarmaMusical(
id: 'a3',
nombre: 'Diaria',
hora: 9,
minuto: 0,
tipoProgramacion: TipoProgramacionAlarma.diaria,
diasSemana: const [],
);
final omitida = DateTime(2026, 5, 22, 9);
final proxima = servicio.calcularProxima(
alarma: alarma,
desde: DateTime(2026, 5, 22, 8),
excepciones: [
ExcepcionAlarma(alarmaId: 'a3', ejecucion: omitida, tipo: 'skipNext'),
],
);
expect(proxima, DateTime(2026, 5, 23, 9));
});
test('snooze solo permite 3, 5 o 10 minutos y cae a 5', () {
expect(
servicio.calcularSnooze(DateTime(2026, 5, 21, 7), 10),
DateTime(2026, 5, 21, 7, 10),
);
expect(
servicio.calcularSnooze(DateTime(2026, 5, 21, 7), 99),
DateTime(2026, 5, 21, 7, 5),
);
});
});
}