import 'package:cardash_launcher/core/display_controller.dart'; import 'package:cardash_launcher/data/models/app_entry.dart'; import 'package:cardash_launcher/data/models/media_playback.dart'; import 'package:cardash_launcher/data/models/system_status.dart'; import 'package:cardash_launcher/data/repositories/settings_repository.dart'; import 'package:cardash_launcher/data/services/native_bridge.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:shared_preferences/shared_preferences.dart'; class _DisplayPlatform implements LauncherPlatform { final List calls = []; @override Future> listApps() async => const []; @override Future launchApp({ required String packageName, required String activityName, }) async {} @override Future isDefaultHome() async => true; @override Future requestDefaultHome() async => true; @override Future getStatus() async => const SystemStatus(); @override Future getVolume() async => const VolumeInfo(); @override Future setVolume(int index) async {} @override Future isMusicPlaying() async => false; @override Future sendMediaKey(String action) async => true; @override Future getMediaState() async => const MediaPlayback(); @override Future openNotificationAccessSettings() async => true; @override Future setKeepScreenOn(bool enabled) async { calls.add(enabled); } } void main() { test('keeps the screen on by default and persists a change', () async { SharedPreferences.setMockInitialValues({}); final prefs = await SharedPreferences.getInstance(); final settings = SettingsRepository(prefs); final platform = _DisplayPlatform(); final controller = DisplayController(platform, settings); addTearDown(controller.dispose); expect(controller.keepScreenOn, isTrue); await controller.initialize(); expect(platform.calls.last, isTrue); await controller.setKeepScreenOn(false); expect(controller.keepScreenOn, isFalse); expect(platform.calls.last, isFalse); expect(SettingsRepository(prefs).keepScreenOn, isFalse); expect( DisplayController(platform, SettingsRepository(prefs)).keepScreenOn, isFalse, ); }); }