import 'package:flutter_test/flutter_test.dart'; import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; import 'package:hepan_everyday/features/school/school_session.dart'; import 'package:hepan_everyday/domain/school_term.dart'; import '../support/fake_school_web.dart'; class CountingSchoolPlatform extends FakeSchoolPlatform { int creations = 0; @override PlatformWebViewController createPlatformWebViewController( PlatformWebViewControllerCreationParams params, ) { creations++; return super.createPlatformWebViewController(params); } } void main() { TestWidgetsFlutterBinding.ensureInitialized(); test('local timetable startup does not construct the school browser', () { final platform = CountingSchoolPlatform(); WebViewPlatform.instance = platform; final session = SchoolSession(); try { expect(platform.creations, 0); expect(session.connectionState, SchoolConnectionState.signedOut); expect(session.hasOpened, isFalse); } finally { session.dispose(); } }); test( 'opening school creates one reusable browser with navigation policy', () async { final platform = CountingSchoolPlatform(); WebViewPlatform.instance = platform; final session = SchoolSession(); try { await session.openTimetable(term: SchoolTerm(73)); expect(platform.creations, 1); final controller = session.web; expect(session.web, same(controller)); expect(platform.creations, 1); expect(platform.web.loads, isNotEmpty); final decision = await platform.delegate.navigation( NavigationRequest( url: 'https://unrelated.example/', isMainFrame: true, ), ); expect(decision, NavigationDecision.prevent); } finally { session.dispose(); } }, ); }