// server_tile_down_test.dart — 节点不可用(status!=up)的列表项渲染断言。 // 锁住 #7 客户端侧:agent 离线 → 节点显示「不可用」+ 禁选(onTap 不触发)。 import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pangolin_vpn/l10n/app_text.dart'; import 'package:pangolin_vpn/models/node.dart'; import 'package:pangolin_vpn/pangolin_theme.dart'; import 'package:pangolin_vpn/widgets/server_tile.dart'; import '../helpers/harness.dart'; void main() { setUpAll(disableGoogleFontsFetching); Widget wrap(Node node, VoidCallback onTap) => MaterialApp( theme: PangolinTheme.light, home: Scaffold(body: ServerTile(node: node, lang: AppLang.zh, onTap: onTap)), ); testWidgets('节点 down → 显示「不可用」且点击不触发', (t) async { var tapped = false; await t.pumpWidget(wrap( const Node(code: 'US', nameZh: '洛杉矶', nameEn: 'LA', ping: 30, status: 'down'), () => tapped = true, )); expect(find.text('不可用'), findsOneWidget); await t.tap(find.byType(ServerTile)); await t.pump(); expect(tapped, isFalse, reason: 'down 节点禁选,onTap 不触发'); }); testWidgets('节点 up → 不显示「不可用」,点击正常触发', (t) async { var tapped = false; await t.pumpWidget(wrap( const Node(code: 'US', nameZh: '洛杉矶', nameEn: 'LA', ping: 30), // status 默认 up () => tapped = true, )); expect(find.text('不可用'), findsNothing); await t.tap(find.byType(ServerTile)); await t.pump(); expect(tapped, isTrue); }); }