| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 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<String> opened = [];
- @override
- Future<bool> openUrl(String url) async {
- opened.add(url);
- return true;
- }
- @override
- Future<List<AppEntry>> listApps() async => const [];
- @override
- Future<void> launchApp({
- required String packageName,
- required String activityName,
- }) async {}
- @override
- Future<bool> isDefaultHome() async => true;
- @override
- Future<bool> requestDefaultHome() async => true;
- @override
- Future<SystemStatus> getStatus() async => const SystemStatus();
- @override
- Future<VolumeInfo> getVolume() async => const VolumeInfo();
- @override
- Future<void> setVolume(int index) async {}
- @override
- Future<bool> isMusicPlaying() async => false;
- @override
- Future<bool> sendMediaKey(String action) async => true;
- @override
- Future<MediaPlayback> getMediaState() async => const MediaPlayback();
- @override
- Future<bool> openNotificationAccessSettings() async => true;
- @override
- Future<void> setKeepScreenOn(bool enabled) async {}
- }
- class _FakeUpdateService extends UpdateService {
- _FakeUpdateService(this.result);
- final UpdateInfo result;
- @override
- Future<UpdateInfo> 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);
- });
- }
|