import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:jj_mkvmaker/app/app_controller.dart'; import 'package:jj_mkvmaker/core/lan_scan.dart'; import 'package:jj_mkvmaker/platform/windows/desktop_storage_service.dart'; import 'package:jj_mkvmaker/platform/windows/process_media_tool.dart'; import 'package:jj_mkvmaker/services/platform_services.dart'; import 'package:jj_mkvmaker/ui/smb_settings.dart'; /// X-plore j: [SMB 서버 추가] 창의 [같은 망에서 찾기] - 진행 · 찾은 서버를 고르면 주소 (이름) 칸을 채움. 시험은 실제 망을 훑지 않는다 (가짜 찾기) void main() { tearDown(() => debugFindSmbServers = null); testWidgets('찾기 → 고르면 주소 · 이름 칸 채움, 못 찾으면 안내', (tester) async { tester.view.physicalSize = const Size(1000, 1200); tester.view.devicePixelRatio = 1; addTearDown(tester.view.reset); var calls = 0; var result = const [LanHost('192.168.0.9', 'nas.local'), LanHost('192.168.0.20', null)]; debugFindSmbServers = ({cancelled, onProgress}) async { calls++; onProgress?.call(254, 254); return result; }; final c = AppController(PlatformServices(mediaTool: ProcessMediaTool('x', 'y'), storage: DesktopStorageService())); final key = GlobalKey(); await tester.pumpWidget(MaterialApp(navigatorKey: key, home: const Scaffold())); editSmbServer(key.currentContext!, c); await tester.pumpAndSettle(); expect(find.text('SMB 서버 추가'), findsOneWidget); await tester.tap(find.text('같은 망에서 찾기')); await tester.pumpAndSettle(); expect(calls, 1); expect(find.text('같은 망의 SMB 서버'), findsOneWidget); expect(find.text('nas.local'), findsOneWidget); expect(find.text('192.168.0.20'), findsOneWidget, reason: '이름을 모르면 주소'); await tester.tap(find.text('nas.local')); await tester.pumpAndSettle(); expect(find.widgetWithText(TextField, 'nas.local'), findsOneWidget, reason: '서버 주소 칸'); expect(find.widgetWithText(TextField, 'nas'), findsOneWidget, reason: '이름 칸 (비어 있었으면)'); // 못 찾음 result = const []; await tester.tap(find.text('같은 망에서 찾기')); await tester.pumpAndSettle(); expect(find.textContaining('찾지 못했습니다'), findsOneWidget); await tester.tap(find.text('닫기')); await tester.pumpAndSettle(); expect(find.text('SMB 서버 추가'), findsOneWidget, reason: '추가 창은 그대로'); }); }