import 'package:drift/native.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:dmc_app/domain/mission/drone_profile.dart'; import 'package:dmc_app/services/database/app_database.dart' hide DroneProfile; import 'package:dmc_app/services/database/drone_profile_repository.dart'; void main() { late AppDatabase db; late DroneProfileRepository repository; setUp(() { db = AppDatabase.forTesting(NativeDatabase.memory()); repository = DroneProfileRepository(db); }); tearDown(() => db.close()); test('ensureSeeded legt beim ersten Aufruf T1 Ranger an', () async { final id = await repository.ensureSeeded(); final all = await repository.loadAll(); expect(all, hasLength(1)); expect(all.single.id, id); expect(all.single.name, 'T1 Ranger'); expect(all.single.cruiseSpeed, 15); }); test('ensureSeeded ist ein no-op, wenn bereits Profile existieren', () async { await repository.insert(DroneProfile.t1Ranger().copyWith(name: 'Custom')); await repository.ensureSeeded(); final all = await repository.loadAll(); expect(all, hasLength(1)); expect(all.single.name, 'Custom'); }); test('insert/update/delete rundtrip', () async { final id = await repository.insert( DroneProfile.t1Ranger().copyWith(name: 'Racer', maxSpeed: 40), ); var all = await repository.loadAll(); expect(all.single.maxSpeed, 40); await repository.update(all.single.copyWith(maxSpeed: 45)); all = await repository.loadAll(); expect(all.single.maxSpeed, 45); expect(all.single.id, id); await repository.delete(id); expect(await repository.loadAll(), isEmpty); }); test('watchAll gibt Aenderungen reaktiv weiter', () async { final stream = repository.watchAll(); final emissions = []; final sub = stream.listen((profiles) => emissions.add(profiles.length)); addTearDown(sub.cancel); await repository.insert(DroneProfile.t1Ranger()); await pumpEventQueue(); expect(emissions, contains(1)); }); }