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/repositories/settings_repository.dart'; import 'package:cardash_launcher/data/services/telemetry_bridge.dart'; import 'package:cardash_launcher/features/home/obd_controller.dart'; import 'package:cardash_launcher/features/settings/obd_settings_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; const _obd = BluetoothDeviceInfo( name: 'ELM327', address: 'AA:BB:CC:DD:EE:01', deviceClass: 0x1F00, ); const _phone = BluetoothDeviceInfo( name: 'Pixel 8', address: 'AA:BB:CC:DD:EE:02', deviceClass: 0x0200, ); class _CardTelemetry implements TelemetryPlatform { @override Future> listBondedDevices() async => const [ _obd, _phone, ]; @override Future bluetoothState() async => BluetoothPowerState.on; @override Future ensureBluetoothPermission() async => true; @override Future openBluetoothSettings() async => true; @override Future ensureLocationPermission() async => true; @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(); @override Future startGpsSpeed() async => false; @override Future stopGpsSpeed() async {} @override Future getGpsSpeed() async => const GpsSpeed(); } void main() { testWidgets('OBD card hides phones until Show all paired devices is tapped', ( tester, ) async { await tester.binding.setSurfaceSize(const Size(900, 700)); addTearDown(() => tester.binding.setSurfaceSize(null)); SharedPreferences.setMockInitialValues({}); final prefs = await SharedPreferences.getInstance(); final controller = ObdController( _CardTelemetry(), SettingsRepository(prefs), ); addTearDown(controller.dispose); await tester.pumpWidget( MaterialApp( theme: AppTheme.light(), home: ChangeNotifierProvider.value( value: controller, child: const Scaffold( body: SizedBox( width: 560, child: Padding( padding: EdgeInsets.all(24), child: ObdSettingsCard(), ), ), ), ), ), ); await tester.pumpAndSettle(); expect(find.text('ELM327 · AA:BB:CC:DD:EE:01'), findsNothing); expect(find.text('Show all paired devices'), findsOneWidget); await tester.tap(find.text('None').first); await tester.pumpAndSettle(); expect(find.text('ELM327 · AA:BB:CC:DD:EE:01'), findsOneWidget); expect(find.text('Pixel 8 · AA:BB:CC:DD:EE:02'), findsNothing); await tester.tap(find.text('None').last); await tester.pumpAndSettle(); await tester.tap(find.text('Show all paired devices')); await tester.pumpAndSettle(); await tester.tap(find.text('None').first); await tester.pumpAndSettle(); expect(find.text('Pixel 8 · AA:BB:CC:DD:EE:02'), findsOneWidget); }); }