Fix school browser initialization and redirect detection; improve diagnostics

This commit is contained in:
Codex
2026-10-15 12:23:35 +08:00
parent 46e26ec548
commit a4c2df838e
20 changed files with 530 additions and 17 deletions
@@ -0,0 +1,61 @@
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:hepan_everyday/features/school/school_browser.dart';
import 'package:hepan_everyday/services/diagnostic_log.dart';
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets(
'Android school browser honors desktop viewport and keeps console details private',
(tester) async {
final web = WebViewController();
await web.setJavaScriptMode(JavaScriptMode.unrestricted);
var loaded = Completer<void>();
await web.setNavigationDelegate(
NavigationDelegate(
onPageFinished: (_) {
if (!loaded.isCompleted) loaded.complete();
},
),
);
await tester.pumpWidget(
MaterialApp(
home: Scaffold(body: WebViewWidget(controller: web)),
),
);
await tester.pumpAndSettle();
const html =
'<!doctype html><html><head><meta name="viewport" content="width=1200"></head>'
'<body>Legacy teaching portal fixture</body></html>';
await web.loadHtmlString(html);
await loaded.future.timeout(const Duration(seconds: 20));
final before = num.parse(
(await web.runJavaScriptReturningResult(
'document.documentElement.clientWidth',
)).toString(),
);
final info = await configureSchoolBrowser(web, 'undergraduate');
loaded = Completer<void>();
await web.loadHtmlString(html);
await loaded.future.timeout(const Duration(seconds: 20));
final after = num.parse(
(await web.runJavaScriptReturningResult(
'document.documentElement.clientWidth',
)).toString(),
);
expect(before, lessThan(1000));
expect(after, greaterThanOrEqualTo(1100));
expect(info.chromiumVersion, matches(r'^\d+(\.\d+){1,3}$'));
await web.runJavaScript('console.error("PRIVATE_NATIVE_CONSOLE_DETAIL")');
await Future<void>.delayed(const Duration(milliseconds: 200));
final log = utf8.decode(await DiagnosticLog.instance.export());
expect(log, contains('school_console_error'));
expect(log, isNot(contains('PRIVATE_NATIVE_CONSOLE_DETAIL')));
},
);
}