fix: import unpublished exam rooms and add opt-in school HTML feedback

This commit is contained in:
Codex
2026-10-16 16:38:00 +08:00
parent defe7fd50e
commit 437ed14dbe
31 changed files with 969 additions and 39 deletions
@@ -6,6 +6,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
import 'package:hepan_everyday/features/school/undergraduate/session.dart';
import 'package:hepan_everyday/features/school/undergraduate/page_probe.dart';
import 'package:hepan_everyday/services/school_page_diagnostic.dart';
import '../support/fake_school_web.dart';
@@ -31,6 +32,21 @@ void main() {
session = UndergraduateSession();
});
tearDown(() => session.dispose());
test('failed import retains diagnostic evidence separately and logout removes it', () async {
addTearDown(SchoolPageDiagnostic.instance.clear);
await session.openTimetable();
final content = File('test/fixtures/school/undergraduate-timetable.html')
.readAsStringSync()
.replaceFirst('"教师1"', '""');
platform.web.javascript = (_) async =>
underEvidence(platform.web.url!, html: content);
await session.readCurrentTimetable();
expect(session.pendingDraft, isNull);
expect(session.message, contains('教师'));
expect(SchoolPageDiagnostic.instance.export(), isNotNull);
session.invalidateAuthentication();
expect(SchoolPageDiagnostic.instance.export(), isNull);
});
test('live URL cannot cross origin or change again during capture', () async {
await session.openTimetable();
final content = File('test/fixtures/school/undergraduate-timetable.html')