import 'package:cardash_launcher/core/theme/app_theme.dart'; import 'package:cardash_launcher/data/models/bluetooth_device_info.dart'; import 'package:cardash_launcher/data/models/gps_speed.dart'; import 'package:cardash_launcher/data/models/location_reading.dart'; import 'package:cardash_launcher/data/models/obd_state.dart'; import 'package:cardash_launcher/data/services/telemetry_bridge.dart'; import 'package:cardash_launcher/features/home/gps_speed_controller.dart'; import 'package:cardash_launcher/features/home/widgets/gps_speed_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; class _GpsPlatform implements TelemetryPlatform { _GpsPlatform({this.permission = true, this.speedKmh = 0}); final bool permission; final double speedKmh; var started = false; @override Future startGpsSpeed() async { started = true; return permission; } @override Future stopGpsSpeed() async {} @override Future getGpsSpeed() async { if (!permission) return const GpsSpeed(); return GpsSpeed( hasPermission: true, hasFix: true, speedKmh: speedKmh, updatedAt: DateTime(2026).millisecondsSinceEpoch, ); } @override Future> listBondedDevices() async => const []; @override Future isBluetoothEnabled() async => false; @override Future ensureBluetoothPermission() async => false; @override Future ensureLocationPermission() async => permission; @override Future getLocation() async => const LocationReading(latitude: 0, longitude: 0, place: ''); @override Future connectObd(String address) async {} @override Future disconnectObd() async {} @override Future getObdState() async => const ObdState(); } void main() { test('stationary GPS fix reports 0 km/h', () async { final platform = _GpsPlatform(speedKmh: 0); final controller = GpsSpeedController( platform, clock: () => DateTime(2026), ); addTearDown(controller.dispose); await controller.start(); expect(platform.started, isTrue); expect(controller.speedKmh, 0); controller.stop(); }); test('no precise location means no prompt and no speed', () async { final platform = _GpsPlatform(permission: false); final controller = GpsSpeedController( platform, clock: () => DateTime(2026), ); addTearDown(controller.dispose); await controller.start(); expect(controller.hasPermission, isFalse); expect(controller.hasSpeed, isFalse); controller.stop(); }); testWidgets('GPS card displays 0 km/h', (tester) async { await tester.pumpWidget( MaterialApp( theme: AppTheme.dark(), home: const Scaffold( body: SizedBox(width: 380, child: GpsSpeedCard(speedKmh: 0)), ), ), ); expect(find.text('0'), findsOneWidget); expect(find.text('km/h'), findsOneWidget); expect(find.text('GPS'), findsOneWidget); }); }