import 'package:flutter_test/flutter_test.dart'; import 'package:url_launcher_platform_interface/link.dart'; import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; import 'package:emergency/services/dialer_service.dart'; /// Fake-Implementierung der `url_launcher`-Plattformschnittstelle. /// /// Vermeidet Mocking auf `MethodChannel`-Ebene: `url_launcher` erlaubt es, /// [UrlLauncherPlatform.instance] durch eine eigene Implementierung zu /// ersetzen – das ist der offiziell vorgesehene Weg, das Package in reinen /// Unit-Tests ohne echte Plattform-Kanäle zu testen. class _FakeUrlLauncherPlatform extends UrlLauncherPlatform { _FakeUrlLauncherPlatform({required this.canLaunchResult}); final bool canLaunchResult; String? launchedUrl; int launchCallCount = 0; @override LinkDelegate? get linkDelegate => null; @override Future canLaunch(String url) async => canLaunchResult; @override Future launchUrl(String url, LaunchOptions options) async { launchCallCount++; launchedUrl = url; return true; } } void main() { TestWidgetsFlutterBinding.ensureInitialized(); group('DialerService', () { const dialerService = DialerService(); test('call() öffnet den Wähler mit tel:-URI und liefert true, wenn canLaunch true ist', () async { final fakePlatform = _FakeUrlLauncherPlatform(canLaunchResult: true); UrlLauncherPlatform.instance = fakePlatform; final result = await dialerService.call('112'); expect(result, isTrue); expect(fakePlatform.launchCallCount, 1); expect(fakePlatform.launchedUrl, 'tel:112'); }); test('call() liefert false ohne launch(), wenn canLaunch false ist', () async { final fakePlatform = _FakeUrlLauncherPlatform(canLaunchResult: false); UrlLauncherPlatform.instance = fakePlatform; final result = await dialerService.call('911'); expect(result, isFalse); expect(fakePlatform.launchCallCount, 0); }); }); }