Files
pj_supermarket_cloud/test/face_recognition_configuration_test.dart
2026-10-23 15:53:43 +08:00

49 lines
1.7 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:pj_supermarket_cloud/common/models/plugs/face_discern_models.dart';
void main() {
const defaults = FaceRecognitionConfiguration.defaults();
test('默认策略和旧版缺少占比字段的策略均使用 3%', () {
expect(defaults.minFaceAreaPercent, 3);
final legacyMap = defaults.toMap()..remove('minFaceAreaPercent');
expect(FaceRecognitionConfiguration.fromMap(legacyMap), defaults);
});
test('占比修改参与未保存判断并通过原生配置协议完整往返', () {
final changed = defaults.copyWith(minFaceAreaPercent: 12);
expect(changed, isNot(defaults));
expect(changed.usesDefaults, isFalse);
expect({defaults, changed}, hasLength(2));
expect(changed.toMap()['minFaceAreaPercent'], 12);
expect(FaceRecognitionConfiguration.fromMap(changed.toMap()), changed);
expect(changed.copyWith(enableLiveness: true).minFaceAreaPercent, 12);
expect(changed.copyWith(minFaceAreaPercent: 3).usesDefaults, isTrue);
});
test('接受已保存占比、百分比边界和小数,异常读取值回退 3% 避免阻断设置页', () {
for (final percent in <num>[1, 3, 5, 5.5, 100]) {
final decoded = FaceRecognitionConfiguration.fromMap({
'minFaceAreaPercent': percent,
});
expect(decoded.minFaceAreaPercent, percent.toDouble());
}
for (final invalid in <Object?>[
null,
'5',
false,
0,
-5,
101,
double.nan,
double.infinity,
double.negativeInfinity,
]) {
final decoded = FaceRecognitionConfiguration.fromMap({
'minFaceAreaPercent': invalid,
});
expect(decoded.minFaceAreaPercent, 3, reason: '异常值 $invalid');
}
});
}