80 lines
2.3 KiB
Dart
80 lines
2.3 KiB
Dart
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);
|
|
},
|
|
);
|
|
}
|