Refine school script diagnostics and document-state capture

This commit is contained in:
Codex
2026-10-15 15:15:42 +08:00
parent a4c2df838e
commit 83b0c7e177
16 changed files with 435 additions and 27 deletions
@@ -6,6 +6,7 @@ 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/features/school/school_browser_diagnostics.dart';
import 'package:hepan_everyday/services/diagnostic_log.dart';
void main() {
@@ -31,7 +32,7 @@ void main() {
await tester.pumpAndSettle();
const html =
'<!doctype html><html><head><meta name="viewport" content="width=1200"></head>'
'<body>Legacy teaching portal fixture</body></html>';
'<body>PRIVATE_NATIVE_PAGE_TEXT</body></html>';
await web.loadHtmlString(html);
await loaded.future.timeout(const Duration(seconds: 20));
final before = num.parse(
@@ -51,11 +52,32 @@ void main() {
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 web.runJavaScript(
'console.error("Uncaught ReferenceError: jQuery is not defined PRIVATE_NATIVE_CONSOLE_DETAIL")',
);
await Future<void>.delayed(const Duration(milliseconds: 200));
// Native data fixtures use about:blank; test the script and decoder here.
// Separate tests cover production origin and document-generation guards.
dynamic fixtureUrl = await web.runJavaScriptReturningResult(
'location.href',
);
if ((fixtureUrl as String).startsWith('"')) {
fixtureUrl = jsonDecode(fixtureUrl);
}
final rawState = await web.runJavaScriptReturningResult(
schoolPageDiagnosticsScript.replaceAll(
'__EXPECTED_URL__',
jsonEncode(fixtureUrl),
),
);
recordSchoolPageState(DiagnosticLog.instance, 'undergraduate', rawState);
final log = utf8.decode(await DiagnosticLog.instance.export());
expect(log, contains('school_console_error'));
expect(log, contains('"code":"jquery_missing"'));
expect(log, contains('"code":"jquery","result":false'));
expect(log, contains('school_asset_state'));
expect(log, isNot(contains('PRIVATE_NATIVE_CONSOLE_DETAIL')));
expect(log, isNot(contains('PRIVATE_NATIVE_PAGE_TEXT')));
},
);
}