Files
TPSchedule/mobile/test/widgets/undergraduate_exam_picker_test.dart
T

91 lines
2.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:hepan_everyday/features/school/undergraduate/exam_query_picker.dart';
import 'package:hepan_everyday/domain/undergraduate_exam_query.dart';
import 'package:hepan_everyday/domain/school_term.dart';
import 'package:hepan_everyday/domain/school_identity.dart';
void main() {
testWidgets('exam picker keeps one semester and requires at least one type', (
tester,
) async {
UndergraduateExamQuery? result;
await tester.pumpWidget(
MaterialApp(
home: Builder(
builder: (context) => Scaffold(
body: TextButton(
onPressed: () async {
result = await showUndergraduateExamQueryPicker(
context,
now: DateTime(2026, 10),
);
},
child: const Text('选择'),
),
),
),
),
);
await tester.tap(find.text('选择'));
await tester.pumpAndSettle();
expect(find.text('2026-2027第一学期'), findsOneWidget);
await tester.tap(find.text('期末考试'));
await tester.pump();
expect(
tester
.widget<FilledButton>(find.widgetWithText(FilledButton, '开始查询'))
.onPressed,
isNull,
);
await tester.tap(find.text('期中考试'));
await tester.tap(find.text('补考/缓考'));
await tester.pump();
await tester.tap(find.text('开始查询'));
await tester.pumpAndSettle();
expect(result!.term.id, 523);
expect(result!.types, {
UndergraduateExamType.midterm,
UndergraduateExamType.makeup,
});
});
testWidgets('saved term and exam types persist and cancel returns null', (
tester,
) async {
final initial = UndergraduateExamQuery(
term: SchoolTerm(503, school: SupportedSchool.uestcUndergraduate),
types: {UndergraduateExamType.midterm},
);
await tester.pumpWidget(
MaterialApp(
home: Builder(
builder: (context) => Scaffold(
body: TextButton(
onPressed: () => showUndergraduateExamQueryPicker(
context,
initial: initial,
now: DateTime(2026, 10),
),
child: const Text('选择'),
),
),
),
),
);
await tester.tap(find.text('选择'));
await tester.pumpAndSettle();
expect(find.text('2025-2026第二学期'), findsOneWidget);
expect(
tester
.widget<CheckboxListTile>(
find.widgetWithText(CheckboxListTile, '期中考试'),
)
.value,
isTrue,
);
await tester.tap(find.text('取消'));
await tester.pumpAndSettle();
expect(find.text('开始查询'), findsNothing);
});
}