feat: 二级页面色彩刷新 + 用药/通知/设备重构 + 后端健康档案/通知管线增强 + 大量测试
## 后端 - 健康档案: 新增手术状态字段 + EF 迁移; HealthArchiveService 新增查询方法 - 健康记录: HealthRecordService 新增批量/统计方法; 契约扩展 - 用药: 新增 MedicationScheduleStatus 枚举; MedicationService 排班逻辑调整 - 通知: EfUserNotificationPipeline 重构; 新增 EfReminderCatchUpService; 通知管线支持更多场景 - 用户: UserService 账号删除逻辑; 新增 local_account_file_cleanup; EfUserRepository 扩展 - AI: medication_agent_handler 微调; prompt_manager 优化; AiConversationService 上下文处理 - Endpoint: doctor/medication/exercise/health/notification/user 等多接口调整 - BackgroundService: health_record_reminder_service 重构, 提醒补漏逻辑 - 测试: 新增 account_deletion/doctor_endpoint/medication_schedule/medication_update/prompt_manager 测试 ## 前端 - UI 系统: app_theme 大幅重构; app_colors/app_design_tokens/app_module_visuals 调整; 二级页面色彩刷新 - 主页: home_page 背景渐变 + 消息列表提取 _HomeMessages + 通知检查逻辑; chat_messages_view 全面重构 - 用药: medication_list/edit/checkin 三页重构, 新增 medication_ui_logic 抽取 - 通知: notification_prefs_page 重构, 新增 notification_prefs_logic; notification_center 优化 - 设备: device_management 重构, 新增 device_sync_ui_logic; device_scan 优化 - 趋势图: trend_page 大幅重构 - 登录: login_page 重构 - 个人资料: 新增 profile_edit_page; profile_page 优化 - 运动: 新增 exercise/ 目录 + care_plan_ui_logic - 其他: remaining_pages/report_pages/health_drawer/admin/doctor 等多页面调整 - 组件: common_widgets/app_empty_state/app_error_state/app_future_view/app_toast/ai_content 优化 - Provider: chat_provider/consultation_provider/data_providers/auth_provider 调整 - AndroidManifest: 移除多余权限 - 测试: 新增 ai_content/care_plan/home_message/login_flow/medication_checkin/medication_ui/notification_prefs/profile_device/secondary_page/swipe_delete 等大量测试 ## 文档 - 新增 ui-design-system.md 设计系统文档 - 新增 secondary-page-color-refresh 计划 + specs 目录
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:health_app/models/ble_device.dart';
|
||||
import 'package:health_app/pages/chart/trend_page.dart';
|
||||
@@ -11,6 +13,61 @@ void main() {
|
||||
expect(normalizeTrendMetricType('spo2'), 'spo2');
|
||||
});
|
||||
|
||||
test('trend period includes today and the requested preceding days', () {
|
||||
final now = DateTime(2026, 7, 13, 18);
|
||||
final records = [
|
||||
{'date': DateTime(2026, 7, 6, 23), 'value': 70},
|
||||
{'date': DateTime(2026, 7, 7, 0), 'value': 71},
|
||||
{'date': DateTime(2026, 7, 13, 8), 'value': 72},
|
||||
];
|
||||
|
||||
final result = filterTrendRecordsForPeriod(records, 7, now);
|
||||
|
||||
expect(result.map((record) => record['value']), [71, 72]);
|
||||
});
|
||||
|
||||
test('trend values do not show an unnecessary decimal', () {
|
||||
expect(formatTrendNumber(88.0), '88');
|
||||
expect(formatTrendNumber(88.5), '88.5');
|
||||
expect(formatTrendNumber(null), '--');
|
||||
});
|
||||
|
||||
test('blood pressure abnormal label identifies the affected value', () {
|
||||
expect(
|
||||
trendStatusLabel({
|
||||
'systolic': 113,
|
||||
'diastolic': 97,
|
||||
'isAbnormal': true,
|
||||
}, 'blood_pressure'),
|
||||
'舒张压偏高',
|
||||
);
|
||||
expect(
|
||||
trendStatusLabel({
|
||||
'systolic': 122,
|
||||
'diastolic': 89,
|
||||
'isAbnormal': false,
|
||||
}, 'blood_pressure'),
|
||||
'',
|
||||
);
|
||||
});
|
||||
|
||||
test('calendar month switch keeps the selected day when possible', () {
|
||||
expect(
|
||||
calendarDateForMonth(DateTime(2026, 6), DateTime(2026, 7, 13)),
|
||||
DateTime(2026, 6, 13),
|
||||
);
|
||||
expect(
|
||||
calendarDateForMonth(DateTime(2026, 2), DateTime(2026, 1, 31)),
|
||||
DateTime(2026, 2, 28),
|
||||
);
|
||||
});
|
||||
|
||||
test('health archive list input is normalized without conflicting none', () {
|
||||
expect(normalizeArchiveItems('青霉素,海鲜\n花粉'), ['青霉素', '海鲜', '花粉']);
|
||||
expect(normalizeArchiveItems('无'), ['无']);
|
||||
expect(normalizeArchiveItems('无、青霉素'), ['青霉素']);
|
||||
});
|
||||
|
||||
test('static compliance pages include collection and sdk lists', () {
|
||||
expect(staticTextTitle('personalInfoList'), '个人信息收集清单');
|
||||
expect(staticTextContent('personalInfoList'), contains('健康数据'));
|
||||
@@ -19,6 +76,19 @@ void main() {
|
||||
expect(staticTextContent('thirdPartySdkList'), contains('AI'));
|
||||
});
|
||||
|
||||
test('all in-app compliance documents contain readable Chinese', () {
|
||||
final source = File('lib/pages/remaining_pages.dart').readAsStringSync();
|
||||
final start = source.indexOf(
|
||||
'const Map<String, String> _extraStaticTextTitles',
|
||||
);
|
||||
expect(start, isNonNegative);
|
||||
final complianceSection = source.substring(start);
|
||||
|
||||
expect(complianceSection, isNot(contains('锛')));
|
||||
expect(complianceSection, isNot(contains('銆')));
|
||||
expect(complianceSection, isNot(contains('€')));
|
||||
});
|
||||
|
||||
test('ble sync is only implemented for blood pressure devices', () {
|
||||
expect(
|
||||
HealthBleService.isSyncImplemented(BleDeviceType.bloodPressure),
|
||||
|
||||
Reference in New Issue
Block a user