import 'package:flutter_test/flutter_test.dart'; import 'package:get/get.dart'; import 'package:deep_voice/modules/agent/controllers/agent_controller.dart'; import 'package:deep_voice/data/services/music_manager.dart'; void main() { group('音乐功能测试', () { late AgentController controller; setUp(() { // 初始化GetX Get.testMode = true; // 模拟MusicManager Get.put(MockMusicManager()); // 创建控制器 controller = AgentController(); }); tearDown(() { Get.reset(); }); test('播放进度状态初始化', () { expect(controller.currentPosition.value, 0); expect(controller.duration.value, 0); expect(controller.progress.value, 0.0); expect(controller.isPlaying.value, false); expect(controller.currentUrl.value, ""); }); test('播放音乐时状态更新', () { final song = { 'id': 'test_id', 'title': 'Test Song', 'url': 'https://example.com/song.mp3', 'artist': 'Test Artist', 'coverUrl': 'https://example.com/cover.jpg', }; controller.musicPlay(song); expect(controller.isPlaying.value, true); expect(controller.currentUrl.value, song['url']); }); test('暂停音乐时状态更新', () { // 先播放 final song = { 'id': 'test_id', 'title': 'Test Song', 'url': 'https://example.com/song.mp3', 'artist': 'Test Artist', 'coverUrl': 'https://example.com/cover.jpg', }; controller.musicPlay(song); // 然后暂停 controller.musicPause(); expect(controller.isPlaying.value, false); }); test('恢复播放时状态更新', () { // 先播放然后暂停 final song = { 'id': 'test_id', 'title': 'Test Song', 'url': 'https://example.com/song.mp3', 'artist': 'Test Artist', 'coverUrl': 'https://example.com/cover.jpg', }; controller.musicPlay(song); controller.musicPause(); // 恢复播放 controller.musicResume(); expect(controller.isPlaying.value, true); }); }); } // 模拟MusicManager用于测试 class MockMusicManager extends GetxService implements MusicManager { @override Future play(Map song) async { // 模拟播放 } @override Future pause() async { // 模拟暂停 } @override Future resume() async { // 模拟恢复 } @override Future> getStatus() async { return { 'isPlaying': false, 'url': '', }; } @override Future> getProgress() async { return { 'currentPosition': 0, 'duration': 0, 'progress': 0.0, }; } @override Future seekTo(int positionMs) async { // 模拟跳转 } @override void onInit() {} @override void onClose() {} @override Future requestNotificationPermission() async {} }