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/models/update_info.dart'; import 'package:cardash_launcher/data/services/native_bridge.dart'; import 'package:cardash_launcher/data/services/update_service.dart'; import 'package:cardash_launcher/features/settings/update_controller.dart'; import 'package:flutter_test/flutter_test.dart'; class _UpdatePlatform implements LauncherPlatform { final List opened = []; @override Future openUrl(String url) async { opened.add(url); return true; } @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 {} } class _FakeUpdateService extends UpdateService { _FakeUpdateService(this.result); final UpdateInfo result; @override Future check(String currentVersion) async => result; } void main() { test('compares semantic versions', () { expect(compareVersions('1.0.1', '1.0.0'), greaterThan(0)); expect(compareVersions('v1.0.0', '1.0.0'), 0); expect(compareVersions('1.0.0', '1.0.1'), lessThan(0)); }); test('reports an available update and opens the release page', () async { final platform = _UpdatePlatform(); final service = _FakeUpdateService( const UpdateInfo( currentVersion: '1.0.0', latestVersion: '1.0.1', available: true, releasePageUrl: 'https://example.test/releases', downloadUrl: 'https://example.test/app.apk', ), ); final controller = UpdateController(platform, service: service); addTearDown(controller.dispose); await controller.check(); expect(controller.updateAvailable, isTrue); expect(controller.latestVersion, '1.0.1'); expect(await controller.openReleasePage(), isTrue); expect(platform.opened.single, 'https://example.test/releases'); }); test('reports up to date when no newer release exists', () async { final service = _FakeUpdateService( const UpdateInfo( currentVersion: '1.0.0', latestVersion: '1.0.0', available: false, releasePageUrl: 'https://example.test/releases', downloadUrl: 'https://example.test/app.apk', ), ); final controller = UpdateController(_UpdatePlatform(), service: service); addTearDown(controller.dispose); await controller.check(); expect(controller.updateAvailable, isFalse); expect(controller.error, isNull); }); }