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