import 'package:flutter_test/flutter_test.dart'; import 'package:ignis_app/features/homes/services/geofence_runtime_store.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); test('runtime store persists armed home and success markers', () async { SharedPreferences.setMockInitialValues({}); final store = GeofenceRuntimeStore(); await store.armForHome('home-1'); var runtime = await store.load(); expect(runtime.armedHomeId, 'home-1'); runtime = runtime.recordSuccess( 'home-1', triggeredAt: DateTime(2026, 5, 1, 18, 30), distanceMeters: 820, ); await store.save(runtime); final loaded = await store.load(); expect(loaded.isTriggeredFor('home-1'), isTrue); expect(loaded.lastSuccessHomeId, 'home-1'); expect(loaded.lastDistanceMeters, 820); }); test( 'returning into home radius rearms geofence and clears failure', () async { SharedPreferences.setMockInitialValues({}); final store = GeofenceRuntimeStore(); var runtime = await store.armForHome('home-1'); runtime = runtime.recordFailure( 'home-1', failedAt: DateTime(2026, 5, 1, 19, 0), distanceMeters: 900, message: 'Backend умер по дороге.', ); runtime = runtime.recordInsideHome( 'home-1', checkedAt: DateTime(2026, 5, 1, 22, 0), distanceMeters: 120, ); await store.save(runtime); final loaded = await store.load(); expect(loaded.failureAtFor('home-1'), isNull); expect(loaded.isTriggeredFor('home-1'), isFalse); expect(loaded.lastDistanceMeters, 120); }, ); test( 'removing home clears armed and historical runtime for that home', () async { SharedPreferences.setMockInitialValues({}); final store = GeofenceRuntimeStore(); var runtime = await store.armForHome('home-1'); runtime = runtime.recordSuccess( 'home-1', triggeredAt: DateTime(2026, 5, 1, 20, 0), distanceMeters: 760, ); await store.save(runtime); await store.removeHome('home-1'); final loaded = await store.load(); expect(loaded.armedHomeId, isNull); expect(loaded.lastSuccessHomeId, isNull); expect(loaded.triggeredHomeId, isNull); }, ); }