feat(calendar): add ReminderQueueManager for handling reminder queue

This commit is contained in:
qzl
2026-03-20 18:26:11 +08:00
parent 9ece726de0
commit 8ac22c97c2
2 changed files with 91 additions and 0 deletions
@@ -0,0 +1,60 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:social_app/features/calendar/reminders/reminder_queue_manager.dart';
import 'package:social_app/features/calendar/reminders/models/reminder_payload.dart';
void main() {
group('ReminderQueueManager', () {
test('按点击顺序处理,第一条处理完后处理剩余的按时间排序', () {
final manager = ReminderQueueManager();
final event1 = ReminderPayload(
eventId: '1',
title: 'Event 1',
startAt: DateTime(2026, 3, 20, 10, 1),
timezone: 'UTC',
mode: ReminderPayloadMode.single,
);
final event2 = ReminderPayload(
eventId: '2',
title: 'Event 2',
startAt: DateTime(2026, 3, 20, 10, 2),
timezone: 'UTC',
mode: ReminderPayloadMode.single,
);
final event3 = ReminderPayload(
eventId: '3',
title: 'Event 3',
startAt: DateTime(2026, 3, 20, 10, 3),
timezone: 'UTC',
mode: ReminderPayloadMode.single,
);
manager.enqueueFromClick(event2);
manager.enqueuePending([event1, event3]);
expect(manager.currentPayload?.eventId, '2');
manager.dequeueCurrent();
expect(manager.currentPayload?.eventId, '1');
manager.dequeueCurrent();
expect(manager.currentPayload?.eventId, '3');
manager.dequeueCurrent();
expect(manager.isEmpty, true);
});
test('单条通知处理完直接清空', () {
final manager = ReminderQueueManager();
final event = ReminderPayload(
eventId: '1',
title: 'Event 1',
startAt: DateTime.now(),
timezone: 'UTC',
mode: ReminderPayloadMode.single,
);
manager.enqueueFromClick(event);
expect(manager.isEmpty, false);
manager.dequeueCurrent();
expect(manager.isEmpty, true);
});
});
}