| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- 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/bluetooth_power_state.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<bool> startGpsSpeed() async {
- started = true;
- return permission;
- }
- @override
- Future<void> stopGpsSpeed() async {}
- @override
- Future<GpsSpeed> getGpsSpeed() async {
- if (!permission) return const GpsSpeed();
- return GpsSpeed(
- hasPermission: true,
- hasFix: true,
- speedKmh: speedKmh,
- updatedAt: DateTime(2026).millisecondsSinceEpoch,
- );
- }
- @override
- Future<List<BluetoothDeviceInfo>> listBondedDevices() async => const [];
- @override
- Future<BluetoothPowerState> bluetoothState() async => BluetoothPowerState.off;
- @override
- Future<bool> ensureBluetoothPermission() async => false;
- @override
- Future<bool> openBluetoothSettings() async => true;
- @override
- Future<bool> ensureLocationPermission() async => permission;
- @override
- Future<LocationReading> getLocation() async =>
- const LocationReading(latitude: 0, longitude: 0, place: '');
- @override
- Future<void> connectObd(String address) async {}
- @override
- Future<void> disconnectObd() async {}
- @override
- Future<ObdState> 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);
- });
- }
|