import 'package:flutter_test/flutter_test.dart'; import 'package:social_app/features/calendar/data/models/schedule_item_model.dart'; import 'package:social_app/features/calendar/reminders/reminder_overlap_policy.dart'; void main() { final policy = ReminderOverlapPolicy(); test('groups reminders in same minute bucket', () { final now = DateTime(2026, 3, 18, 15, 40, 0); final eventA = ScheduleItemModel( id: 'a', ownerId: 'u1', title: 'A', startAt: DateTime(2026, 3, 18, 16, 0, 0), endAt: DateTime(2026, 3, 18, 17, 0, 0), metadata: ScheduleMetadata(reminderMinutes: 15), ); final eventB = ScheduleItemModel( id: 'b', ownerId: 'u1', title: 'B', startAt: DateTime(2026, 3, 18, 16, 0, 20), endAt: DateTime(2026, 3, 18, 17, 0, 0), metadata: ScheduleMetadata(reminderMinutes: 15), ); final groups = policy.groupByMinute([eventA, eventB], now: now); expect(groups.length, 1); expect(groups.first.events.length, 2); expect(groups.first.isAggregate, isTrue); }); test('returns compensation fire time when remindAt already passed', () { final now = DateTime(2026, 3, 18, 15, 50, 0); final event = ScheduleItemModel( id: 'a', ownerId: 'u1', title: 'A', startAt: DateTime(2026, 3, 18, 16, 0, 0), endAt: DateTime(2026, 3, 18, 16, 30, 0), metadata: ScheduleMetadata(reminderMinutes: 15), ); final fireAt = policy.resolveFirstFireAt(event, now: now); expect(fireAt, isNotNull); expect(fireAt!.isAfter(now), isTrue); }); }