Preserve courses with pending rooms and report precise graduate import errors

This commit is contained in:
david1465833828
2026-10-28 19:56:02 +08:00
parent 8713bce0ee
commit 21b0df9e33
17 changed files with 340 additions and 53 deletions
@@ -7,6 +7,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:hepan_everyday/features/school/undergraduate/timetable_adapter.dart';
import 'package:hepan_everyday/data/schedule_file_import.dart';
import 'package:hepan_everyday/domain/school_identity.dart';
import 'package:hepan_everyday/domain/course.dart';
void main() {
test('missing course fields identify the failing field without disclosing values', () {
@@ -15,7 +16,6 @@ void main() {
'index=0*unitCount+0;table0.activities[index][table0.activities[index].length]=activity;';
for (final entry in {
'teacher_missing': base.replaceFirst('"教师"', '""'),
'room_missing': base.replaceFirst('"教室"', '""'),
'course_sequence_invalid': base.replaceFirst('课程(C.01)', '课程'),
}.entries) {
expect(
@@ -51,6 +51,24 @@ void main() {
String fixture() =>
File('test/fixtures/school/undergraduate-timetable.html')
.readAsStringSync();
test('missing room retains every scheduled occurrence and clearly marks it pending', () {
final original = UndergraduateTimetableAdapter.extract(fixture(), uri);
final draft = UndergraduateTimetableAdapter.extract(
fixture().replaceFirst('"教室1"', '""'),
uri,
);
Set<String> occurrences(Iterable<Course> courses) => <String>{
for (final c in courses)
for (final w in c.weeks)
for (var p = c.startPeriod; p <= c.endPeriod; p++)
'${c.courseCode}/${c.teacher}/${c.weekday}/$p/$w',
};
expect(occurrences(draft.courses), occurrences(original.courses));
final pending = draft.courses.where((c) => c.room == '教室待定');
expect(pending, isNotEmpty);
expect(pending.every((c) => c.notes.contains('学校未提供教室')), isTrue);
expect(draft.courses.any((c) => c.room == '教室2'), isTrue);
});
test('undergraduate activity data preserves teachers rooms weeks and period twelve', () {
final draft = UndergraduateTimetableAdapter.extract(fixture(), uri);
expect(draft.schoolTerm!.id, 523);