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/services/native_bridge.dart'; import 'package:cardash_launcher/features/home/system_controller.dart'; import 'package:flutter_test/flutter_test.dart'; class _MediaPlatform implements LauncherPlatform { bool playing = false; MediaPlayback media = const MediaPlayback(); final List keys = []; @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(index: 8, max: 15); @override Future setVolume(int index) async {} @override Future isMusicPlaying() async => playing; @override Future sendMediaKey(String action) async { keys.add(action); if (action == 'play') playing = true; if (action == 'pause') playing = false; return true; } @override Future getMediaState() async => media; @override Future openNotificationAccessSettings() async => true; @override Future setKeepScreenOn(bool enabled) async {} @override Future openUrl(String url) async => true; } void main() { test('pause sends the pause key and clears playing state', () async { final platform = _MediaPlatform()..playing = true; final controller = SystemController(platform); await controller.start(); addTearDown(controller.dispose); expect(controller.isMusicPlaying, isTrue); await controller.pauseMusic(); expect(platform.keys, contains('pause')); expect(controller.isMusicPlaying, isFalse); controller.stop(); }); test('media state supplies the title, progress and playing flag', () async { final platform = _MediaPlatform() ..media = const MediaPlayback( hasAccess: true, hasSession: true, playing: true, title: 'Night Drive', artist: 'The Dashboard', durationMs: 240000, positionMs: 60000, ); final controller = SystemController(platform); await controller.start(); addTearDown(controller.dispose); expect(controller.hasMediaAccess, isTrue); expect(controller.media.displayTitle, 'Night Drive — The Dashboard'); expect(controller.media.progress, 0.25); expect(controller.isMusicPlaying, isTrue); controller.stop(); }); test('play resumes and reports whether audio started', () async { final platform = _MediaPlatform(); final controller = SystemController(platform); await controller.start(); addTearDown(controller.dispose); expect(controller.isMusicPlaying, isFalse); expect(await controller.playMusic(), isTrue); expect(platform.keys, contains('play')); expect(controller.isMusicPlaying, isTrue); controller.stop(); }); }