Add persisted local state and baseline CRUD flows

This commit is contained in:
Rijad Zuzo
2026-02-15 15:12:23 +01:00
parent d708aa58d9
commit 4472668474
12 changed files with 1324 additions and 350 deletions
@@ -0,0 +1,73 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:relationship_saver/features/local/local_repository.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
setUp(() {
SharedPreferences.setMockInitialValues(<String, Object>{});
});
test('seeds local data on first load', () async {
final ProviderContainer container = ProviderContainer();
addTearDown(container.dispose);
final state = await container.read(localRepositoryProvider.future);
expect(state.people, isNotEmpty);
expect(state.moments, isNotEmpty);
expect(state.tasks, isNotEmpty);
});
test('adds and removes person with persistence state update', () async {
final ProviderContainer container = ProviderContainer();
addTearDown(container.dispose);
final initial = await container.read(localRepositoryProvider.future);
final int initialCount = initial.people.length;
await container
.read(localRepositoryProvider.notifier)
.addPerson(
name: 'Test Person',
relationship: 'Friend',
notes: 'test',
tags: <String>['alpha'],
);
final afterAdd = await container.read(localRepositoryProvider.future);
expect(afterAdd.people.length, initialCount + 1);
final String insertedId = afterAdd.people.first.id;
await container
.read(localRepositoryProvider.notifier)
.deletePerson(insertedId);
final afterDelete = await container.read(localRepositoryProvider.future);
expect(afterDelete.people.length, initialCount);
});
test('adds and removes capture moments', () async {
final ProviderContainer container = ProviderContainer();
addTearDown(container.dispose);
final state = await container.read(localRepositoryProvider.future);
final String personId = state.people.first.id;
final int beforeCount = state.moments.length;
await container
.read(localRepositoryProvider.notifier)
.addMoment(personId: personId, summary: 'This is a new capture moment');
final withMoment = await container.read(localRepositoryProvider.future);
expect(withMoment.moments.length, beforeCount + 1);
final String momentId = withMoment.moments.first.id;
await container
.read(localRepositoryProvider.notifier)
.deleteMoment(momentId);
final afterDelete = await container.read(localRepositoryProvider.future);
expect(afterDelete.moments.length, beforeCount);
});
}
+5
View File
@@ -1,8 +1,13 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:relationship_saver/main.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
setUpAll(() async {
SharedPreferences.setMockInitialValues(<String, Object>{});
});
testWidgets('renders dashboard flow', (WidgetTester tester) async {
await tester.pumpWidget(const ProviderScope(child: RelationshipSaverApp()));
await tester.pumpAndSettle();