focus-flow/packages/scheduler_notifications/test/fake_adapter_test.dart

63 lines
1.9 KiB
Dart

/// 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';
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<NotificationFeedback>((feedback) {
return feedback.id == 'reminder-1' &&
feedback.type == NotificationFeedbackType.clicked &&
feedback.payloadJson == '{"taskId":"task-1"}';
})),
);
adapter.emitFeedback(event);
});
}