Add local data store adapter layer and Hive scaffold
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:relationship_saver/features/local/storage/local_data_store_shared_prefs.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
void main() {
|
||||
setUp(() {
|
||||
SharedPreferences.setMockInitialValues(<String, Object>{});
|
||||
});
|
||||
|
||||
test('write and read roundtrip', () async {
|
||||
final SharedPrefsLocalDataStore store = SharedPrefsLocalDataStore();
|
||||
|
||||
await store.write(rawState: '{"people":[]}', schemaVersion: 7);
|
||||
|
||||
final record = await store.read();
|
||||
expect(record, isNotNull);
|
||||
expect(record!.rawState, '{"people":[]}');
|
||||
expect(record.schemaVersion, 7);
|
||||
});
|
||||
|
||||
test('clear removes stored payload', () async {
|
||||
final SharedPrefsLocalDataStore store = SharedPrefsLocalDataStore();
|
||||
|
||||
await store.write(rawState: '{"x":1}', schemaVersion: 1);
|
||||
await store.clear();
|
||||
|
||||
expect(await store.read(), isNull);
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
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: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/sync/sync_queue_repository.dart';
|
||||
import 'package:relationship_saver/features/sync/sync_state.dart';
|
||||
import 'package:relationship_saver/integrations/backend/models/backend_models.dart';
|
||||
|
||||
void main() {
|
||||
test('local repository works with injected in-memory store', () async {
|
||||
final InMemoryLocalDataStore store = InMemoryLocalDataStore();
|
||||
final ProviderContainer container = ProviderContainer(
|
||||
overrides: [
|
||||
localDataStoreProvider.overrideWithValue(store),
|
||||
syncQueueRepositoryProvider.overrideWith(_NoopSyncQueueRepository.new),
|
||||
],
|
||||
);
|
||||
addTearDown(container.dispose);
|
||||
|
||||
final initial = await container.read(localRepositoryProvider.future);
|
||||
expect(initial.people, isNotEmpty);
|
||||
|
||||
await container
|
||||
.read(localRepositoryProvider.notifier)
|
||||
.addPerson(
|
||||
name: 'Injected Store Person',
|
||||
relationship: 'Friend',
|
||||
notes: 'stored in-memory',
|
||||
tags: const <String>['in-memory'],
|
||||
);
|
||||
|
||||
final updated = await container.read(localRepositoryProvider.future);
|
||||
expect(
|
||||
updated.people.any((person) => person.name == 'Injected Store Person'),
|
||||
isTrue,
|
||||
);
|
||||
|
||||
final record = await store.read();
|
||||
expect(record, isNotNull);
|
||||
expect(record!.rawState.contains('Injected Store Person'), isTrue);
|
||||
});
|
||||
}
|
||||
|
||||
class _NoopSyncQueueRepository extends SyncQueueRepository {
|
||||
@override
|
||||
Future<SyncState> build() async => SyncState.empty;
|
||||
|
||||
@override
|
||||
Future<void> enqueue(ChangeEnvelope change) async {
|
||||
return;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> enqueueAll(Iterable<ChangeEnvelope> changes) async {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user