import 'package:flutter_test/flutter_test.dart'; import 'package:pj_supermarket_cloud/common/index.dart'; /// 验证 Root、终端平台和自动更新默认配置的纯模型兼容行为。 void main() { test('旧终端设置缺少 Root 字段时恢复为未检查', () { final setting = SysSetting.fromJson(const { 'sysType': 'CANTEEN', 'androidId': 'android-test-id', 'sqlAddress': '', }); expect(setting.rootAccessStatus, RootAccessStatus.unknown); expect(setting.rootAccessCheckedAt, isNull); expect(setting.rootAccessDiagnostic, isNull); }); test('Root 原生检查结果只在确认 available 时标记可用', () { final available = RootAccessCheckResult.fromMap(const { 'available': true, 'message': '已通过 su -c id 确认 uid=0', }); final unavailable = RootAccessCheckResult.fromMap(const { 'available': false, 'message': 'Root 授权超时', }); expect(available.status, RootAccessStatus.available); expect(available.available, isTrue); expect(unavailable.status, RootAccessStatus.unavailable); expect(unavailable.available, isFalse); }); test('终端业务类型映射到独立 Android 版本平台', () { expect( AppPlatformEnum.terminalCode(SysType.SUPERMARKET), AppPlatformEnum.supermarketAndroid.code, ); expect( AppPlatformEnum.terminalCode(SysType.CANTEEN), AppPlatformEnum.canteenAndroid.code, ); }); test('APK 自动更新默认每天零点三十分且仅空闲执行', () { final config = SyncCheckTool.defaultConfigs.singleWhere( (item) => item.type == ScheduledTaskType.autoUpdate, ); expect(config.enabled, isTrue); expect(config.cron, '0 30 0 * * *'); expect(config.idleOnly, isTrue); }); test('APK 自动更新只选择最高的已发布强制更新版本', () { final decision = TerminalAutoUpdateTool.evaluateForcedUpdate( versions: [ ServiceAppVersion( appUniqueCode: 'terminal-app', platform: '4', versionCode: 132, versionName: '1.3.2', status: AppVersionStatusEnum.published.code, isForce: true, ), ServiceAppVersion( appUniqueCode: 'terminal-app', platform: '4', versionCode: 140, versionName: '1.4.0', status: AppVersionStatusEnum.published.code, isForce: true, ), ], currentVersionCode: 1, appUniqueCode: 'terminal-app', platform: '4', ); expect(decision.target?.versionCode, 140); expect(decision.hasTarget, isTrue); }); test('APK 自动更新不会把未发布的更高版本误报为最新', () { final decision = TerminalAutoUpdateTool.evaluateForcedUpdate( versions: [ ServiceAppVersion( appUniqueCode: 'terminal-app', platform: '4', versionCode: 132, versionName: '1.3.2', status: AppVersionStatusEnum.unpublished.code, isForce: false, ), ], currentVersionCode: 1, appUniqueCode: 'terminal-app', platform: '4', ); expect(decision.hasTarget, isFalse); expect(decision.skippedMessage, contains('未处于已发布状态')); expect(decision.skippedMessage, isNot(contains('已是最新版本'))); }); test('APK 自动更新跳过未标记强制更新的已发布版本', () { final decision = TerminalAutoUpdateTool.evaluateForcedUpdate( versions: [ ServiceAppVersion( appUniqueCode: 'terminal-app', platform: '4', versionCode: 132, versionName: '1.3.2', status: AppVersionStatusEnum.published.code, isForce: false, ), ], currentVersionCode: 1, appUniqueCode: 'terminal-app', platform: '4', ); expect(decision.hasTarget, isFalse); expect(decision.skippedMessage, contains('未标记为强制更新')); }); }