Files
biz_xfj_cloud/test/pages/terminal/setting_face_quality_test.dart
T
dzc aff7fe38dd feat:统计增加表头提示
feat:商户交易记录、部门交易记录增加分片、进度条导出
feat:增加人脸质量上报
feat:app"通知"权限修改
2026-09-01 12:43:32 +08:00

109 lines
3.7 KiB
Dart

import 'package:ducafe_ui_core/ducafe_ui_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:forui/forui.dart';
import 'package:get/get.dart';
import 'package:pj_supermarket_cloud/common/index.dart';
import 'package:pj_supermarket_cloud/pages/terminal/setting/widgets/setting_face.dart';
/// 验证人脸管理两个文字 Tab 的点击、选中语义和最小触控尺寸。
void main() {
tearDown(Get.reset);
testWidgets('点击低质量人脸Tab后更新选中状态和语义', (tester) async {
await tester.binding.setSurfaceSize(const Size(1920, 1080));
addTearDown(() => tester.binding.setSurfaceSize(null));
var selected = FaceManageTab.all;
await tester.pumpWidget(
ScreenUtilInit(
designSize: const Size(1920, 1080),
builder: (_, __) => MaterialApp(
home: FTheme(
data: FThemes.zinc.light,
child: Scaffold(
body: StatefulBuilder(
builder: (context, setState) => FaceManageTabBar(
selectedTab: selected,
onChanged: (value) => setState(() => selected = value),
),
),
),
),
),
),
);
expect(find.bySemanticsLabel('人脸管理 Tab,已选中'), findsOneWidget);
expect(find.bySemanticsLabel('低质量人脸 Tab'), findsOneWidget);
final lowQualityTab = find.bySemanticsLabel('低质量人脸 Tab');
expect(tester.getSize(lowQualityTab).height, greaterThanOrEqualTo(48));
await tester.tap(find.text('低质量人脸'));
await tester.pump();
expect(find.bySemanticsLabel('低质量人脸 Tab,已选中'), findsOneWidget);
expect(find.bySemanticsLabel('人脸管理 Tab'), findsOneWidget);
});
testWidgets('大量低质量人脸卡片完整展示且不发生布局溢出', (tester) async {
await tester.binding.setSurfaceSize(const Size(1920, 1080));
addTearDown(() => tester.binding.setSurfaceSize(null));
Get.put(AppControl());
final controller = Get.put<FaceManageController>(
_TestFaceManageController(),
);
controller.selectedTab.value = FaceManageTab.lowQuality;
controller.libraryQualityThreshold.value = 0.60;
controller.faceList.assignAll(
List.generate(
15,
(index) => FaceEntity(
userId: 'user-$index',
sampleId: 'sample-$index',
userName: '测试人员$index',
imagePath: '',
qualityScore: 0.58,
qualityStatus: 'detected',
),
),
);
await tester.pumpWidget(
ScreenUtilInit(
designSize: const Size(1920, 1080),
builder: (_, __) => GetMaterialApp(
home: FTheme(
data: FThemes.zinc.light,
child: Scaffold(
body: Builder(builder: settingFace),
),
),
),
),
);
await tester.pump();
expect(tester.takeException(), isNull);
expect(find.text('原因:评分低于 0.60'), findsWidgets);
expect(find.text('低质量 0.58'), findsWidgets);
final hitTarget = find.byKey(
const ValueKey('low-quality-delete-hit-sample-0'),
);
final visualButton = find.byKey(
const ValueKey('low-quality-delete-visual-sample-0'),
);
expect(tester.getSize(hitTarget).height, greaterThanOrEqualTo(48));
expect(tester.getSize(visualButton), const Size(116, 32));
});
}
/// 禁用异步初始化,供网格布局测试直接注入稳定的本地人脸数据。
class _TestFaceManageController extends FaceManageController {
/// 测试只验证 Widget 布局,不启动设置、数据库和原生质量进度监听。
@override
// ignore: must_call_super
void onInit() {}
}