Files
biz_xfj_cloud/test/common/terminal_update_models_test.dart
T
2026-07-30 17:06:17 +08:00

128 lines
3.9 KiB
Dart

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('未标记为强制更新'));
});
}