// SPDX-FileCopyrightText: 2026 FocusFlow contributors // SPDX-License-Identifier: AGPL-3.0-only /// Tests Fake Adapter behavior for the Scheduler Notifications package. library; import 'package:scheduler_notifications/notifications.dart'; import 'package:test/test.dart'; import 'notification_adapter_contract.dart'; /// Entry point for this executable Dart file. /// It wires the local command, test, or application behavior needed by this repository without exposing additional public API. void main() { runNotificationAdapterContractTests('fake', () { final adapter = FakeNotificationAdapter(); return NotificationAdapterContractHarness( adapter: adapter, scheduledRequests: () => adapter.scheduledRequests.values.toList(), cancelledIds: () => adapter.cancelledIds, dispose: adapter.close, ); }); test('fake adapter stores schedules and cancellations', () async { final adapter = FakeNotificationAdapter(); addTearDown(adapter.close); final request = NotificationRequest( id: ' reminder-1 ', title: 'Start task', body: 'Time to begin.', scheduledDateTimeUtc: DateTime.utc(2026, 1, 1, 9), payloadJson: '{"taskId":"task-1"}', ); await adapter.schedule(request); expect(adapter.scheduledRequests.keys, ['reminder-1']); expect( adapter.scheduledRequests['reminder-1']!.scheduledDateTimeUtc.isUtc, isTrue, ); await adapter.cancel(' reminder-1 '); expect(adapter.scheduledRequests, isEmpty); expect(adapter.cancelledIds, ['reminder-1']); }); test('fake adapter emits feedback events', () async { final adapter = FakeNotificationAdapter(); addTearDown(adapter.close); final event = NotificationFeedback( id: 'reminder-1', type: NotificationFeedbackType.clicked, payloadJson: '{"taskId":"task-1"}', ); expectLater( adapter.feedback, emits(predicate((feedback) { return feedback.id == 'reminder-1' && feedback.type == NotificationFeedbackType.clicked && feedback.payloadJson == '{"taskId":"task-1"}'; })), ); adapter.emitFeedback(event); }); }