test(client): L2 点连接能连上 流程 + ConnectApi 注入(支柱1)

- connection_provider:加 connectApiFactoryProvider(原内部 new ConnectApi 改成
  可注入工厂,支柱1 接缝即接口)——默认行为不变
- test/unit/flow_connect_test.dart:真 toggle → fetchConfig(注入 MockClient 回占位
  config)→ bridge.start → statusStream 确认 → on → 再 toggle → off;
  验证「非乐观翻转」红线(on 必由 bridge 确认)
- 全量 unit/widget 47 全过(重构不破坏)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-06-25 12:13:40 +08:00
parent 95fad37989
commit 76dbdcfa83
2 changed files with 99 additions and 1 deletions
+9 -1
View File
@@ -136,7 +136,7 @@ class ConnectionController extends StateNotifier<ConnectionState> {
Future<String> doFetch() {
final token = _ref.read(authProvider).accessToken ?? '';
_api?.dispose();
_api = ConnectApi(baseUrl: kApiBaseUrl, authToken: token);
_api = _ref.read(connectApiFactoryProvider)(token);
return _api!.fetchConfig(
nodeId: nodeUuid,
deviceId: _kDeviceId,
@@ -215,3 +215,11 @@ final connectionProvider =
final vpnStatsProvider = StreamProvider<VpnStatsEvent>(
(ref) => ref.watch(vpnBridgeProvider).statsStream,
);
/// 按 authToken 造 ConnectApi 的工厂(支柱 1:接缝即接口)。默认走真控制面;
/// 测试 override 注入 MockClient,即可驱动「连接成功」路径而不打真网络。
typedef ConnectApiFactory = ConnectApi Function(String authToken);
final connectApiFactoryProvider = Provider<ConnectApiFactory>(
(_) => (authToken) => ConnectApi(baseUrl: kApiBaseUrl, authToken: authToken),
);