| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- 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<List<BluetoothDeviceInfo>> listBondedDevices() async => const [
- _obd,
- _phone,
- ];
- @override
- Future<BluetoothPowerState> bluetoothState() async => BluetoothPowerState.on;
- @override
- Future<bool> ensureBluetoothPermission() async => true;
- @override
- Future<bool> openBluetoothSettings() async => true;
- @override
- Future<bool> ensureLocationPermission() async => true;
- @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();
- @override
- Future<bool> startGpsSpeed() async => false;
- @override
- Future<void> stopGpsSpeed() async {}
- @override
- Future<GpsSpeed> 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<ObdController>.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);
- });
- }
|