import 'dart:convert'; import 'package:flutter_test/flutter_test.dart'; import 'package:http/http.dart' as http; import 'package:http/testing.dart'; import 'package:dmc_app/services/geocoding/nominatim_service.dart'; http.Response _json(Object body) => http.Response(jsonEncode(body), 200, headers: { 'content-type': 'application/json', }); void main() { group('NominatimService.search', () { test('bevorzugt city aus address gegenueber display_name', () async { final client = MockClient((request) async { expect(request.url.queryParameters['q'], 'Amsterdam'); return _json([ { 'lat': '52.37403', 'lon': '4.88969', 'display_name': 'Amsterdam, Noord-Holland, Netherlands', 'address': {'city': 'Amsterdam', 'county': 'Noord-Holland'}, }, ]); }); final service = NominatimService(client: client); final result = await service.search('Amsterdam'); expect(result, isNotNull); expect(result!.label, 'Amsterdam'); expect(result.lat, closeTo(52.37403, 0.00001)); expect(result.lon, closeTo(4.88969, 0.00001)); }); test('faellt ohne strukturierte Adresse auf display_name zurueck', () async { final client = MockClient((request) async { return _json([ { 'lat': '1.0', 'lon': '2.0', 'display_name': 'Somewhere Remote, Some Region', 'address': {}, }, ]); }); final service = NominatimService(client: client); final result = await service.search('remote place'); expect(result!.label, 'Somewhere Remote'); }); test('liefert null bei leeren Ergebnissen', () async { final client = MockClient((request) async => _json([])); final service = NominatimService(client: client); expect(await service.search('nowhere'), isNull); }); test('liefert null bei fehlgeschlagenem Request', () async { final client = MockClient((request) async => http.Response('', 500)); final service = NominatimService(client: client); expect(await service.search('anywhere'), isNull); }); }); }