feat: compose Android app and verify native calendar and reminders
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:integration_test/integration_test.dart';
|
||||
import 'package:timezone/data/latest.dart' as tzdata;
|
||||
import 'package:hepan_everyday/services/android_calendar_service.dart';
|
||||
import 'package:hepan_everyday/domain/schedule_engine.dart';
|
||||
|
||||
import '../test/domain/schedule_engine_test.dart' show course;
|
||||
|
||||
void main() {
|
||||
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
||||
testWidgets(
|
||||
'native dedicated calendar creates updates deduplicates and deletes owned events',
|
||||
(tester) async {
|
||||
tzdata.initializeTimeZones();
|
||||
await tester.pumpWidget(const MaterialApp(home: Scaffold()));
|
||||
final gateway = MethodCalendarGateway();
|
||||
final service = AndroidCalendarService(gateway);
|
||||
expect(await service.requestAccess(),isTrue);
|
||||
final calendars = await service.listWritableCalendars();
|
||||
final selected = calendars.where(
|
||||
(c) => c.name == 'Hepan_Integration_Test',
|
||||
);
|
||||
if (selected.isEmpty) {
|
||||
fail('请先在专用模拟器建立 Hepan Integration Test 日历');
|
||||
}
|
||||
final id = selected.single.id;
|
||||
final events = ScheduleEngine.occurrences([
|
||||
course(last: 2),
|
||||
], Semester(startDate: DateTime(2026, 9, 9), totalWeeks: 1));
|
||||
var mapping = await service.sync(events, id, {});
|
||||
expect(mapping, hasLength(1));
|
||||
final original = mapping.values.single;
|
||||
mapping = await service.sync(events, id, {}); // lost mapping recovery
|
||||
expect(mapping.values.single, original);
|
||||
expect(await gateway.ownedEvents(id), hasLength(1));
|
||||
await gateway.delete(original, 'wrong-occurrence');
|
||||
expect(await gateway.ownedEvents(id), hasLength(1));
|
||||
await service.deleteOwned(mapping);
|
||||
expect(await gateway.ownedEvents(id), isEmpty);
|
||||
},
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user