修复工作人员端令牌失效后的登录恢复
This commit is contained in:
77
apps/service_app/test/ui/preflight_page_test.dart
Normal file
77
apps/service_app/test/ui/preflight_page_test.dart
Normal file
@@ -0,0 +1,77 @@
|
||||
// 功能描述:验证作业前检查页面失败重试不会向 setState 返回异步任务。
|
||||
// 版本:1.0.0
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:service_app/app/dependencies.dart';
|
||||
import 'package:service_app/data/repositories/service_repository.dart';
|
||||
import 'package:service_app/data/services/api_client.dart';
|
||||
import 'package:service_app/data/services/location_service.dart';
|
||||
import 'package:service_app/data/services/secure_session_store.dart';
|
||||
import 'package:service_app/domain/models/service_models.dart';
|
||||
import 'package:service_app/ui/features/preflight/preflight_page.dart';
|
||||
|
||||
/// 提供无需平台插件的空会话存储。
|
||||
class _EmptySessionStore implements SessionStore {
|
||||
@override
|
||||
Future<void> delete(String key) async {}
|
||||
|
||||
@override
|
||||
Future<String?> read(String key) async => null;
|
||||
|
||||
@override
|
||||
Future<void> write(String key, String value) async {}
|
||||
}
|
||||
|
||||
/// 提供不会在重试测试中访问系统定位的占位实现。
|
||||
class _UnusedLocationService implements LocationService {
|
||||
@override
|
||||
Future<LocationPoint> current() => throw UnimplementedError();
|
||||
}
|
||||
|
||||
/// 首次加载失败、第二次成功,用于验证真实重试路径。
|
||||
class _FailOnceRepository extends ServiceRepository {
|
||||
_FailOnceRepository()
|
||||
: super(
|
||||
ApiClient(() => '', baseUrl: 'https://api.example.com'),
|
||||
_UnusedLocationService(),
|
||||
);
|
||||
|
||||
int calls = 0;
|
||||
|
||||
@override
|
||||
Future<PreflightResult> preflight() async {
|
||||
calls += 1;
|
||||
if (calls == 1) throw StateError('temporary failure');
|
||||
return const PreflightResult(
|
||||
roleCode: 'delivery',
|
||||
workStatus: 'off_duty',
|
||||
canWork: false,
|
||||
checks: {},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 点击重新加载后应成功刷新,且测试过程不得出现 Flutter 断言。
|
||||
void main() {
|
||||
testWidgets('作业检查失败后可重新加载', (tester) async {
|
||||
final repository = _FailOnceRepository();
|
||||
final session = StaffSession(_EmptySessionStore());
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: PreflightPage(session: session, repository: repository),
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(find.text('作业检查加载失败'), findsOneWidget);
|
||||
expect(repository.calls, 1);
|
||||
|
||||
await tester.tap(find.text('重新加载'));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(find.text('作业检查加载失败'), findsNothing);
|
||||
expect(find.text('仍有前置条件未完成'), findsOneWidget);
|
||||
expect(repository.calls, 2);
|
||||
expect(tester.takeException(), isNull);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user