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(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( find.widgetWithText(CheckboxListTile, '期中考试'), ) .value, isTrue, ); await tester.tap(find.text('取消')); await tester.pumpAndSettle(); expect(find.text('开始查询'), findsNothing); }); }