import 'package:flutter_test/flutter_test.dart'; import 'package:dmc_app/app_mode/app_mode_cubit.dart'; import 'package:dmc_app/domain/waypoint/flat_waypoint_list.dart'; import 'package:dmc_app/services/mission_sync_service.dart'; import 'package:dmc_app/transport/mock/mock_flight_controller_link.dart'; /// FlightControllerLink-Doppelgaenger, der einen erfolgreichen Upload aber /// eine fehlschlagende Verifikation simuliert - MockFlightControllerLink /// selbst kann das nicht (dessen verifyMission() vergleicht immer korrekt /// gegen die zuletzt hochgeladene Wegpunktzahl). class _UnverifiableLink extends MockFlightControllerLink { @override Future verifyMission(FlatWaypointList mission) async => false; } void main() { const mission = FlatWaypointList([ Waypoint(lat: 52.5, lon: 13.4, altitudeM: 60, speedMs: 15, catchRadiusM: 60), ]); test('erfolgreicher Sync setzt missionUploaded und missionVerified', () async { final appMode = AppModeCubit(); addTearDown(appMode.close); final service = MissionSyncService(MockFlightControllerLink(), appMode); await service.syncAndUpload(mission); expect(appMode.state.missionUploaded, isTrue); expect(appMode.state.missionVerified, isTrue); }); test('Upload im armed-Zustand wirft und setzt keinen der beiden Flags', () async { final appMode = AppModeCubit(); addTearDown(appMode.close); final link = MockFlightControllerLink(); await link.arm(); final service = MissionSyncService(link, appMode); await expectLater(() => service.syncAndUpload(mission), throwsStateError); expect(appMode.state.missionUploaded, isFalse); expect(appMode.state.missionVerified, isFalse); }); test('fehlschlagende Verifikation wirft MissionVerificationException, ' 'missionUploaded bleibt trotzdem gesetzt, missionVerified nicht', () async { final appMode = AppModeCubit(); addTearDown(appMode.close); final service = MissionSyncService(_UnverifiableLink(), appMode); await expectLater( () => service.syncAndUpload(mission), throwsA(isA()), ); expect(appMode.state.missionUploaded, isTrue); expect(appMode.state.missionVerified, isFalse); }); }