Wire reminder scheduler interface into local repository

This commit is contained in:
Rijad Zuzo
2026-02-15 20:16:38 +01:00
parent f1442e89d8
commit 5228799abb
6 changed files with 141 additions and 5 deletions
+56 -1
View File
@@ -4,6 +4,8 @@ import 'package:relationship_saver/features/local/local_models.dart';
import 'package:relationship_saver/features/local/local_repository.dart';
import 'package:relationship_saver/features/local/storage/local_data_store_in_memory.dart';
import 'package:relationship_saver/features/local/storage/local_data_store_provider.dart';
import 'package:relationship_saver/features/reminders/scheduling/reminder_scheduler.dart';
import 'package:relationship_saver/features/reminders/scheduling/reminder_scheduler_provider.dart';
import 'package:relationship_saver/features/sync/storage/sync_state_store_in_memory.dart';
import 'package:relationship_saver/features/sync/storage/sync_state_store_provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
@@ -175,13 +177,66 @@ void main() {
);
expect(afterDelete.reminders.length, beforeCount);
});
test('reconciles reminder schedule after state changes', () async {
final RecordingReminderScheduler scheduler = RecordingReminderScheduler();
final ProviderContainer container = _createContainer(scheduler: scheduler);
addTearDown(container.dispose);
final LocalDataState initial = await container.read(
localRepositoryProvider.future,
);
final int beforeCount = initial.reminders.length;
await container
.read(localRepositoryProvider.notifier)
.addReminder(
title: 'Scheduled reminder',
cadence: ReminderCadence.daily,
nextAt: DateTime.now().add(const Duration(hours: 4)),
);
final LocalDataState afterAdd = await container.read(
localRepositoryProvider.future,
);
await container
.read(localRepositoryProvider.notifier)
.deleteReminder(afterAdd.reminders.first.id);
final LocalDataState afterDelete = await container.read(
localRepositoryProvider.future,
);
expect(scheduler.snapshots, isNotEmpty);
expect(scheduler.snapshots.first.length, beforeCount);
expect(
scheduler.snapshots.any(
(List<ReminderRule> r) => r.length == beforeCount + 1,
),
isTrue,
);
expect(scheduler.snapshots.last.length, afterDelete.reminders.length);
});
}
ProviderContainer _createContainer() {
ProviderContainer _createContainer({ReminderScheduler? scheduler}) {
return ProviderContainer(
overrides: [
localDataStoreProvider.overrideWithValue(InMemoryLocalDataStore()),
syncStateStoreProvider.overrideWithValue(InMemorySyncStateStore()),
if (scheduler != null)
reminderSchedulerProvider.overrideWithValue(scheduler),
],
);
}
class RecordingReminderScheduler implements ReminderScheduler {
final List<List<ReminderRule>> snapshots = <List<ReminderRule>>[];
@override
Future<void> clearAll() async {}
@override
Future<void> reconcile(List<ReminderRule> reminders) async {
snapshots.add(List<ReminderRule>.unmodifiable(reminders));
}
}