Files
TPSchedule/mobile/test/school/lazy_school_session_test.dart

59 lines
1.9 KiB
Dart

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();
}
},
);
}