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
+39
View File
@@ -2,11 +2,44 @@ import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:timezone/data/latest.dart' as tzdata;
import 'package:hepan_everyday/app/hepan_app.dart';
import 'package:hepan_everyday/app/app_controller.dart';
import 'package:hepan_everyday/features/profile/settings_page.dart';
import 'package:hepan_everyday/services/calendar_service.dart';
import '../support/fakes.dart';
import 'navigation_test.dart' show uiController;
void main() {
setUpAll(tzdata.initializeTimeZones);
testWidgets('calendar provider failure is explained and keeps switch off', (
tester,
) async {
final controller = AppController(
MemoryStore(),
FakeNotifications(),
UnavailableCalendar(),
DateTime.now,
);
await controller.initialize();
await tester.pumpWidget(
MaterialApp(home: SettingsPage(controller: controller)),
);
await tester.pumpAndSettle();
await tester.scrollUntilVisible(
find.text('导入手机日历'),
250,
scrollable: find.byType(Scrollable).first,
);
await tester.ensureVisible(find.text('导入手机日历'));
await tester.pumpAndSettle();
await tester.tap(find.text('导入手机日历'));
await tester.pumpAndSettle();
expect(tester.takeException(), isNull);
expect(find.text('日历暂时不可用,请检查权限后重试'), findsOneWidget);
expect(controller.snapshot.settings.calendarEnabled, isFalse);
controller.dispose();
});
testWidgets(
'invalid semester weeks are rejected without changing saved data',
(tester) async {
@@ -57,3 +90,9 @@ void main() {
controller.dispose();
});
}
class UnavailableCalendar extends FakeCalendar {
@override
Future<List<DeviceCalendar>> listWritableCalendars() async =>
throw StateError('unavailable');
}