MotorSignal-App/test/map_provider_test.dart

76 lines
2.6 KiB
Dart

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, 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));
});
});
}