feat: compose Android app and verify native calendar and reminders

This commit is contained in:
Codex
2026-10-13 09:14:47 +08:00
parent 2c4256b880
commit 5ceab20b67
37 changed files with 695 additions and 229 deletions
+56
View File
@@ -0,0 +1,56 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:timezone/data/latest.dart' as tzdata;
import 'package:hepan_everyday/main.dart';
import 'package:hepan_everyday/app/app_controller.dart';
import 'package:hepan_everyday/app/hepan_app.dart';
import 'package:hepan_everyday/domain/app_snapshot.dart';
import 'package:hepan_everyday/domain/app_settings.dart';
import 'package:hepan_everyday/domain/semester.dart';
import '../support/fakes.dart';
import '../domain/schedule_engine_test.dart' show course;
void main() {
setUpAll(tzdata.initializeTimeZones);
testWidgets(
'actual startup connects both tabs and reminder tap opens saved course',
(tester) async {
final selection = ValueNotifier<String?>(null);
final controller = AppController(
MemoryStore(
AppSnapshot(
courses: [course(last: 2)],
settings: AppSettings(
semester: Semester(
startDate: DateTime(2026, 9, 9),
totalWeeks: 5,
),
),
),
),
FakeNotifications(),
FakeCalendar(),
() => DateTime.utc(2026, 9, 8),
);
await controller.initialize();
await tester.pumpWidget(
buildApplication(controller, notificationSelection: selection),
);
await tester.pumpAndSettle();
expect(find.bySemanticsLabel('课表'), findsOneWidget);
expect(find.bySemanticsLabel('我的'), findsOneWidget);
await tester.tap(find.bySemanticsLabel('我的'));
await tester.pumpAndSettle();
selection.value = 'math/2026-09-09';
await tester.pumpAndSettle();
expect(find.text('知道了'), findsOneWidget);
expect(find.textContaining('08:30–10:05'), findsOneWidget);
await tester.tap(find.text('知道了'));
await tester.pumpAndSettle();
expect(find.byType(HepanApp), findsOneWidget);
controller.dispose();
selection.dispose();
},
);
}