feat(alarm): add musical alarm foundation
This commit is contained in:
@@ -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),
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user