import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pluriwave/servicios/servicio_alarmas_android.dart'; /// S3-R2: the event controller and handler flag must be instance state so /// two bridges created independently never share events. void main() { TestWidgetsFlutterBinding.ensureInitialized(); Future emitirAlarmFired(String canal, Map payload) { final mensaje = const StandardMethodCodec().encodeMethodCall( MethodCall('alarmFired', payload), ); return TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger .handlePlatformMessage(canal, mensaje, (_) {}); } test('dos instancias no comparten el stream de eventos (S3-R2-A)', () async { final servicioA = ServicioAlarmasAndroid( channel: const MethodChannel('pluriwave/alarm_scheduler_test_a'), ); final servicioB = ServicioAlarmasAndroid( channel: const MethodChannel('pluriwave/alarm_scheduler_test_b'), ); final eventosA = []; final eventosB = []; final subA = servicioA.eventosAlarma.listen(eventosA.add); final subB = servicioB.eventosAlarma.listen(eventosB.add); addTearDown(subA.cancel); addTearDown(subB.cancel); await emitirAlarmFired('pluriwave/alarm_scheduler_test_a', { 'alarmId': 'solo-a', 'alarmTitle': 'Alarma A', 'alarmAction': 'es.freetimelab.pluriwave.ALARM_FIRE', }); await Future.delayed(Duration.zero); expect(eventosA.map((e) => e.alarmaId), ['solo-a']); expect(eventosB, isEmpty, reason: 'B no debe ver los eventos de A'); await emitirAlarmFired('pluriwave/alarm_scheduler_test_b', { 'alarmId': 'solo-b', 'alarmTitle': 'Alarma B', 'alarmAction': 'es.freetimelab.pluriwave.ALARM_FIRE', }); await Future.delayed(Duration.zero); expect(eventosA.map((e) => e.alarmaId), ['solo-a']); expect(eventosB.map((e) => e.alarmaId), ['solo-b']); }); }