import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:motorcycle_dash/services/map/map_provider_interface.dart'; import 'package:motorcycle_dash/services/map/map_providers.dart'; import 'package:motorcycle_dash/services/map/open_street_map_provider.dart'; import 'package:motorcycle_dash/services/map/google_map_provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); setUp(() { SharedPreferences.setMockInitialValues({}); }); group('Map Provider Architecture Tests', () { test('AppLatLng equality and initialization', () { const p1 = AppLatLng(37.7749, -122.4194); const p2 = AppLatLng(37.7749, -122.4194); const p3 = AppLatLng(34.0522, -118.2437); expect(p1, equals(p2)); expect(p1, isNot(equals(p3))); }); test('MapConfig defaults', () { const config = MapConfig(); expect(config.tileUrlTemplate, anyOf(contains('cartocdn.com'), contains('openstreetmap.org'))); expect(config.attributionText, contains('OpenStreetMap')); expect(config.userAgent, contains('MotorcycleDashboard')); }); test('OpenStreetMapProvider instance properties', () { final osmProvider = OpenStreetMapProvider(); expect(osmProvider.type, equals(AppMapType.openStreetMap)); expect(osmProvider.name, equals('OpenStreetMap')); }); test('GoogleMapProvider instance properties', () { final googleProvider = GoogleMapProvider(); expect(googleProvider.type, equals(AppMapType.googleMaps)); expect(googleProvider.name, equals('Google Maps')); }); test('MapFollowNotifier state toggles', () { final container = ProviderContainer(); addTearDown(container.dispose); final notifier = container.read(mapFollowStateProvider.notifier); expect(container.read(mapFollowStateProvider), isTrue); notifier.userInteracted(); expect(container.read(mapFollowStateProvider), isFalse); notifier.recenter(); expect(container.read(mapFollowStateProvider), isTrue); }); test('ActiveMapProvider resolves correct instance', () { final container = ProviderContainer(); addTearDown(container.dispose); // Default is OpenStreetMap final active = container.read(activeMapProvider); expect(active.type, equals(AppMapType.openStreetMap)); // Switch to Google Maps container.read(mapProviderTypeNotifierProvider.notifier).setMapProviderType(AppMapType.googleMaps); final activeGoogle = container.read(activeMapProvider); expect(activeGoogle.type, equals(AppMapType.googleMaps)); }); }); }