Add ideas and reminders CRUD flows with navigation

This commit is contained in:
Rijad Zuzo
2026-02-15 15:20:23 +01:00
parent 4472668474
commit a33e663d57
7 changed files with 1316 additions and 24 deletions
@@ -1,5 +1,6 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:relationship_saver/features/local/local_models.dart';
import 'package:relationship_saver/features/local/local_repository.dart';
import 'package:shared_preferences/shared_preferences.dart';
@@ -70,4 +71,104 @@ void main() {
final afterDelete = await container.read(localRepositoryProvider.future);
expect(afterDelete.moments.length, beforeCount);
});
test('adds, archives, edits, and deletes ideas', () async {
final ProviderContainer container = ProviderContainer();
addTearDown(container.dispose);
final LocalDataState state = await container.read(
localRepositoryProvider.future,
);
final String personId = state.people.first.id;
final int beforeCount = state.ideas.length;
await container
.read(localRepositoryProvider.notifier)
.addIdea(
type: IdeaType.gift,
title: 'Test idea',
details: 'some details',
personId: personId,
);
final LocalDataState afterAdd = await container.read(
localRepositoryProvider.future,
);
expect(afterAdd.ideas.length, beforeCount + 1);
final RelationshipIdea inserted = afterAdd.ideas.first;
await container
.read(localRepositoryProvider.notifier)
.toggleIdeaArchived(inserted.id);
LocalDataState afterArchive = await container.read(
localRepositoryProvider.future,
);
expect(afterArchive.ideas.first.isArchived, isTrue);
await container
.read(localRepositoryProvider.notifier)
.updateIdea(afterArchive.ideas.first.copyWith(title: 'Updated idea'));
afterArchive = await container.read(localRepositoryProvider.future);
expect(afterArchive.ideas.first.title, 'Updated idea');
await container
.read(localRepositoryProvider.notifier)
.deleteIdea(inserted.id);
final LocalDataState afterDelete = await container.read(
localRepositoryProvider.future,
);
expect(afterDelete.ideas.length, beforeCount);
});
test('adds, updates, toggles, and deletes reminders', () async {
final ProviderContainer container = ProviderContainer();
addTearDown(container.dispose);
final LocalDataState state = await container.read(
localRepositoryProvider.future,
);
final String personId = state.people.first.id;
final int beforeCount = state.reminders.length;
await container
.read(localRepositoryProvider.notifier)
.addReminder(
title: 'Test reminder',
cadence: ReminderCadence.weekly,
nextAt: DateTime.now().add(const Duration(days: 1)),
personId: personId,
);
LocalDataState afterAdd = await container.read(
localRepositoryProvider.future,
);
expect(afterAdd.reminders.length, beforeCount + 1);
final ReminderRule inserted = afterAdd.reminders.first;
await container
.read(localRepositoryProvider.notifier)
.toggleReminderEnabled(inserted.id);
afterAdd = await container.read(localRepositoryProvider.future);
expect(afterAdd.reminders.first.enabled, isFalse);
await container
.read(localRepositoryProvider.notifier)
.updateReminder(
afterAdd.reminders.first.copyWith(title: 'Updated reminder'),
);
afterAdd = await container.read(localRepositoryProvider.future);
expect(afterAdd.reminders.first.title, 'Updated reminder');
await container
.read(localRepositoryProvider.notifier)
.deleteReminder(inserted.id);
final LocalDataState afterDelete = await container.read(
localRepositoryProvider.future,
);
expect(afterDelete.reminders.length, beforeCount);
});
}