44 lines
1.8 KiB
Dart
44 lines
1.8 KiB
Dart
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);
|
|
},
|
|
);
|
|
}
|