import 'package:flutter_test/flutter_test.dart'; import 'package:emergency/repositories/emergency_number_repository.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); group('EmergencyNumberRepository', () { test('lookup() vor load() liefert null statt Exception', () { final repository = EmergencyNumberRepository(); expect(repository.isLoaded, isFalse); expect(repository.lookup('DE'), isNull); }); test('load() liest das Asset ein und lookup() liefert bekannte Länder', () async { final repository = EmergencyNumberRepository(); await repository.load(); expect(repository.isLoaded, isTrue); final germany = repository.lookup('DE'); expect(germany, isNotNull); expect(germany!.nameEn, 'Germany'); expect(germany.nameDe, 'Deutschland'); expect(germany.numbers.map((e) => e.number), containsAll(['112', '110'])); final us = repository.lookup('US'); expect(us, isNotNull); expect(us!.nameEn, 'United States'); expect(us.numbers.single.number, '911'); final uk = repository.lookup('GB'); expect(uk, isNotNull); expect(uk!.nameEn, 'United Kingdom'); expect(uk.numbers.map((e) => e.number), contains('999')); }); test('lookup() ist case-insensitive', () async { final repository = EmergencyNumberRepository(); await repository.load(); final lower = repository.lookup('de'); final mixed = repository.lookup('De'); final upper = repository.lookup('DE'); expect(lower, isNotNull); expect(lower, equals(upper)); expect(mixed, equals(upper)); }); test('lookup() mit unbekanntem Ländercode liefert null', () async { final repository = EmergencyNumberRepository(); await repository.load(); expect(repository.lookup('ZZ'), isNull); expect(repository.lookup(''), isNull); }); test('load() ist idempotent (zweiter Aufruf lädt nicht erneut)', () async { final repository = EmergencyNumberRepository(); await repository.load(); final firstLookup = repository.lookup('DE'); await repository.load(); final secondLookup = repository.lookup('DE'); expect(firstLookup, equals(secondLookup)); }); }); group('EmergencyNumberRepository.allCountries', () { test('vor load() liefert eine leere Liste statt Exception', () { final repository = EmergencyNumberRepository(); expect(repository.allCountries, isEmpty); }); test('nach load() nicht leer und enthält bekannte Länder (DE/US)', () async { final repository = EmergencyNumberRepository(); await repository.load(); final countries = repository.allCountries; expect(countries, isNotEmpty); expect(countries.map((c) => c.isoCode), containsAll(['DE', 'US'])); }); test('ist alphabetisch nach nameDe sortiert', () async { final repository = EmergencyNumberRepository(); await repository.load(); final names = repository.allCountries.map((c) => c.nameDe).toList(); final sortedNames = [...names]..sort(); expect(names, equals(sortedNames)); }); }); }