Render startup immediately and defer native work with a smooth home transition
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
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();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
@@ -66,9 +66,12 @@ void main() {
|
||||
WebViewPlatform.instance = platform;
|
||||
final session = SchoolSession();
|
||||
addTearDown(session.dispose);
|
||||
// A previously authenticated session has already opened its browser.
|
||||
final connectedBrowser = session.web;
|
||||
session.connectionState = SchoolConnectionState.connected;
|
||||
await session.openTimetable(term: SchoolTerm(72), chooseTerm: true);
|
||||
expect(session.needsTermSelection, isTrue);
|
||||
expect(session.web, same(connectedBrowser));
|
||||
expect(platform.web.loads, isEmpty);
|
||||
expect(session.selectedTerm, SchoolTerm(72));
|
||||
expect(session.pendingDraft, isNull);
|
||||
|
||||
Reference in New Issue
Block a user