import 'package:etm_powersync_app/providers/energy_setup_provider.dart'; import 'package:etm_powersync_app/providers/scheduler_provider.dart'; import 'package:etm_powersync_app/providers/tariff_provider.dart'; import 'package:etm_powersync_app/services/connection_manager.dart'; import 'package:etm_powersync_app/services/installation_store.dart'; import 'package:etm_powersync_app/services/nymea_service.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:shared_preferences/shared_preferences.dart'; /// Régression « zéro fuite au switch » (Étape 8). Vérifie en machine ce que le /// click-through Android valide à l'œil : aucune donnée d'une box ne survit à /// une bascule. void main() { TestWidgetsFlutterBinding.ensureInitialized(); setUp(() => SharedPreferences.setMockInitialValues({})); test('NymeaService.resetState vide les caches par-box (things/history/energy)', () { final s = NymeaService(); s.startSimulation(); // peuple things + history + energyData expect(s.things, isNotEmpty, reason: 'la démo doit peupler des things'); s.resetState(); expect(s.things, isEmpty); expect(s.thingClasses, isEmpty); expect(s.historyPoints, isEmpty); expect(s.thingsLoaded, isFalse); s.disconnect(); // stoppe le timer de simulation }); test('EnergySetupProvider.clearForSwitch réinitialise le tri-état', () { final p = EnergySetupProvider(); p.assignThing(EmsRole.evCharger, 'thing-ev-A'); p.assignThing(EmsRole.dhw, 'thing-ecs-A'); expect(p.isPresent(EmsRole.evCharger), isTrue); expect(p.controllableRoles, isNotEmpty); p.clearForSwitch(); expect(p.isUnconfigured(EmsRole.evCharger), isTrue); expect(p.isUnconfigured(EmsRole.dhw), isTrue); expect(p.controllableRoles, isEmpty); expect(p.priorityOf(EmsRole.evCharger), isNull); }); test('Scheduler & Tariff clearForSwitch reviennent aux défauts', () { final sc = SchedulerProvider()..clearForSwitch(); expect(sc.loading, isFalse); expect(sc.strategy, SchedulerStrategy.rulesBased); final t = TariffProvider()..clearForSwitch(); expect(t.loading, isFalse); expect(t.mode, TariffMode.fixed); expect(t.manualPrice, 0.25); }); test('ConnectionManager invoque tous les clearers enregistrés au switch', () { final s = NymeaService(); final m = ConnectionManager(s, InstallationStore()); var cleared = 0; m.registerCacheClear(() => cleared++); m.registerCacheClear(() => cleared++); m.enterDemo(); // _clearCaches() → resetState + clearers, puis startSimulation expect(cleared, 2, reason: 'chaque provider enregistré doit être vidé'); s.disconnect(); // stoppe le timer de simulation }); }