|
|
@@ -6,6 +6,7 @@ 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/data/services/weather_service.dart';
|
|
|
+import 'package:cardash_launcher/features/home/gps_speed_controller.dart';
|
|
|
import 'package:cardash_launcher/features/home/telemetry_settings_controller.dart';
|
|
|
import 'package:cardash_launcher/features/home/weather_controller.dart';
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
@@ -14,10 +15,14 @@ import 'package:shared_preferences/shared_preferences.dart';
|
|
|
class _TelemetryPlatform implements TelemetryPlatform {
|
|
|
_TelemetryPlatform({this.locationGranted = true});
|
|
|
|
|
|
- final bool locationGranted;
|
|
|
+ bool locationGranted;
|
|
|
+ int locationRequests = 0;
|
|
|
|
|
|
@override
|
|
|
- Future<bool> ensureLocationPermission() async => locationGranted;
|
|
|
+ Future<bool> ensureLocationPermission() async {
|
|
|
+ locationRequests++;
|
|
|
+ return locationGranted;
|
|
|
+ }
|
|
|
|
|
|
@override
|
|
|
Future<LocationReading> getLocation() async =>
|
|
|
@@ -74,9 +79,11 @@ void main() {
|
|
|
_TelemetryPlatform(),
|
|
|
weatherService: _WeatherService(),
|
|
|
);
|
|
|
- final controller = TelemetrySettingsController(settings, weather)
|
|
|
+ final gps = GpsSpeedController(_TelemetryPlatform());
|
|
|
+ final controller = TelemetrySettingsController(settings, weather, gps)
|
|
|
..initialize();
|
|
|
addTearDown(controller.dispose);
|
|
|
+ addTearDown(gps.dispose);
|
|
|
addTearDown(weather.dispose);
|
|
|
|
|
|
expect(controller.speedEnabled, isTrue);
|
|
|
@@ -105,9 +112,11 @@ void main() {
|
|
|
_TelemetryPlatform(),
|
|
|
weatherService: _WeatherService(),
|
|
|
);
|
|
|
- final controller = TelemetrySettingsController(settings, weather)
|
|
|
+ final gps = GpsSpeedController(_TelemetryPlatform());
|
|
|
+ final controller = TelemetrySettingsController(settings, weather, gps)
|
|
|
..initialize();
|
|
|
addTearDown(controller.dispose);
|
|
|
+ addTearDown(gps.dispose);
|
|
|
addTearDown(weather.dispose);
|
|
|
|
|
|
await controller.setTemperatureUseObd(false);
|
|
|
@@ -133,9 +142,11 @@ void main() {
|
|
|
_TelemetryPlatform(locationGranted: false),
|
|
|
weatherService: _WeatherService(),
|
|
|
);
|
|
|
- final controller = TelemetrySettingsController(settings, weather)
|
|
|
+ final gps = GpsSpeedController(_TelemetryPlatform());
|
|
|
+ final controller = TelemetrySettingsController(settings, weather, gps)
|
|
|
..initialize();
|
|
|
addTearDown(controller.dispose);
|
|
|
+ addTearDown(gps.dispose);
|
|
|
addTearDown(weather.dispose);
|
|
|
|
|
|
final granted = await controller.setTemperatureUseObd(false);
|
|
|
@@ -146,4 +157,94 @@ void main() {
|
|
|
expect(controller.weatherError, isNotNull);
|
|
|
},
|
|
|
);
|
|
|
+
|
|
|
+ test('enabling speed asks for location without an OBD adapter', () async {
|
|
|
+ SharedPreferences.setMockInitialValues({});
|
|
|
+ final prefs = await SharedPreferences.getInstance();
|
|
|
+ final settings = SettingsRepository(prefs);
|
|
|
+ await settings.setSpeedEnabled(false);
|
|
|
+ final platform = _TelemetryPlatform();
|
|
|
+ final weather = WeatherController(platform);
|
|
|
+ final gps = GpsSpeedController(platform);
|
|
|
+ final controller = TelemetrySettingsController(settings, weather, gps)
|
|
|
+ ..initialize();
|
|
|
+ addTearDown(controller.dispose);
|
|
|
+ addTearDown(gps.dispose);
|
|
|
+ addTearDown(weather.dispose);
|
|
|
+
|
|
|
+ final granted = await controller.setSpeedEnabled(true);
|
|
|
+
|
|
|
+ expect(granted, isTrue);
|
|
|
+ expect(platform.locationRequests, 1);
|
|
|
+ expect(controller.speedEnabled, isTrue);
|
|
|
+ expect(settings.speedEnabled, isTrue);
|
|
|
+ });
|
|
|
+
|
|
|
+ test('enabling speed does not ask when OBD speed is selected', () async {
|
|
|
+ SharedPreferences.setMockInitialValues({});
|
|
|
+ final prefs = await SharedPreferences.getInstance();
|
|
|
+ final settings = SettingsRepository(prefs);
|
|
|
+ await settings.setSpeedEnabled(false);
|
|
|
+ await settings.setObdAdapterAddress('AA:BB:CC:DD:EE:FF');
|
|
|
+ final platform = _TelemetryPlatform();
|
|
|
+ final weather = WeatherController(platform);
|
|
|
+ final gps = GpsSpeedController(platform);
|
|
|
+ final controller = TelemetrySettingsController(settings, weather, gps)
|
|
|
+ ..initialize();
|
|
|
+ addTearDown(controller.dispose);
|
|
|
+ addTearDown(gps.dispose);
|
|
|
+ addTearDown(weather.dispose);
|
|
|
+
|
|
|
+ final granted = await controller.setSpeedEnabled(true);
|
|
|
+
|
|
|
+ expect(granted, isTrue);
|
|
|
+ expect(platform.locationRequests, 0);
|
|
|
+ expect(controller.speedEnabled, isTrue);
|
|
|
+ });
|
|
|
+
|
|
|
+ test('denied location keeps speed on and reports the failure', () async {
|
|
|
+ SharedPreferences.setMockInitialValues({});
|
|
|
+ final prefs = await SharedPreferences.getInstance();
|
|
|
+ final settings = SettingsRepository(prefs);
|
|
|
+ await settings.setSpeedEnabled(false);
|
|
|
+ final platform = _TelemetryPlatform(locationGranted: false);
|
|
|
+ final weather = WeatherController(platform);
|
|
|
+ final gps = GpsSpeedController(platform);
|
|
|
+ final controller = TelemetrySettingsController(settings, weather, gps)
|
|
|
+ ..initialize();
|
|
|
+ addTearDown(controller.dispose);
|
|
|
+ addTearDown(gps.dispose);
|
|
|
+ addTearDown(weather.dispose);
|
|
|
+
|
|
|
+ final granted = await controller.setSpeedEnabled(true);
|
|
|
+
|
|
|
+ expect(granted, isFalse);
|
|
|
+ expect(platform.locationRequests, 1);
|
|
|
+ expect(controller.speedEnabled, isTrue);
|
|
|
+ expect(settings.speedEnabled, isTrue);
|
|
|
+ });
|
|
|
+
|
|
|
+ test('choosing GPS speed asks for location while speed is on', () async {
|
|
|
+ SharedPreferences.setMockInitialValues({});
|
|
|
+ final prefs = await SharedPreferences.getInstance();
|
|
|
+ final settings = SettingsRepository(prefs);
|
|
|
+ await settings.setObdAdapterAddress('AA:BB:CC:DD:EE:FF');
|
|
|
+ final platform = _TelemetryPlatform();
|
|
|
+ final weather = WeatherController(platform);
|
|
|
+ final gps = GpsSpeedController(platform);
|
|
|
+ final controller = TelemetrySettingsController(settings, weather, gps)
|
|
|
+ ..initialize();
|
|
|
+ addTearDown(controller.dispose);
|
|
|
+ addTearDown(gps.dispose);
|
|
|
+ addTearDown(weather.dispose);
|
|
|
+
|
|
|
+ final granted = await controller.setSpeedUseObd(false);
|
|
|
+
|
|
|
+ expect(granted, isTrue);
|
|
|
+ expect(platform.locationRequests, 1);
|
|
|
+ expect(controller.speedUseObd, isFalse);
|
|
|
+
|
|
|
+ expect(await controller.setSpeedUseObd(true), isTrue);
|
|
|
+ expect(platform.locationRequests, 1);
|
|
|
+ });
|
|
|
}
|