Wire reminder scheduler interface into local repository
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user