test(07-01): add failing tests for SortPreferenceNotifier
- Tests cover default state (alphabetical) - Tests cover setSortOption state update - Tests cover SharedPreferences persistence - Tests cover persisted value loaded on restart - Tests cover unknown persisted value fallback
This commit is contained in:
@@ -0,0 +1,101 @@
|
|||||||
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
|
import 'package:household_keeper/features/tasks/domain/task_sort_option.dart';
|
||||||
|
import 'package:household_keeper/features/tasks/presentation/sort_preference_notifier.dart';
|
||||||
|
|
||||||
|
/// Helper: create a container and wait for the initial async _loadPersisted()
|
||||||
|
/// to finish.
|
||||||
|
Future<ProviderContainer> makeContainer() async {
|
||||||
|
final container = ProviderContainer();
|
||||||
|
// Trigger build
|
||||||
|
container.read(sortPreferenceProvider);
|
||||||
|
// Allow the async _loadPersisted() to complete
|
||||||
|
await Future<void>.delayed(Duration.zero);
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
setUp(() {
|
||||||
|
SharedPreferences.setMockInitialValues({});
|
||||||
|
});
|
||||||
|
|
||||||
|
group('SortPreferenceNotifier', () {
|
||||||
|
test('build() returns default state of alphabetical', () async {
|
||||||
|
final container = ProviderContainer();
|
||||||
|
addTearDown(container.dispose);
|
||||||
|
|
||||||
|
final state = container.read(sortPreferenceProvider);
|
||||||
|
|
||||||
|
expect(state, TaskSortOption.alphabetical);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('setSortOption(interval) updates state to interval', () async {
|
||||||
|
final container = await makeContainer();
|
||||||
|
addTearDown(container.dispose);
|
||||||
|
|
||||||
|
await container
|
||||||
|
.read(sortPreferenceProvider.notifier)
|
||||||
|
.setSortOption(TaskSortOption.interval);
|
||||||
|
|
||||||
|
expect(container.read(sortPreferenceProvider), TaskSortOption.interval);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('setSortOption(effort) updates state to effort', () async {
|
||||||
|
final container = await makeContainer();
|
||||||
|
addTearDown(container.dispose);
|
||||||
|
|
||||||
|
await container
|
||||||
|
.read(sortPreferenceProvider.notifier)
|
||||||
|
.setSortOption(TaskSortOption.effort);
|
||||||
|
|
||||||
|
expect(container.read(sortPreferenceProvider), TaskSortOption.effort);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('setSortOption persists to SharedPreferences', () async {
|
||||||
|
final container = await makeContainer();
|
||||||
|
addTearDown(container.dispose);
|
||||||
|
|
||||||
|
await container
|
||||||
|
.read(sortPreferenceProvider.notifier)
|
||||||
|
.setSortOption(TaskSortOption.effort);
|
||||||
|
|
||||||
|
final prefs = await SharedPreferences.getInstance();
|
||||||
|
expect(prefs.getString('task_sort_option'), 'effort');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('persisted value is loaded on restart (effort)', () async {
|
||||||
|
SharedPreferences.setMockInitialValues({
|
||||||
|
'task_sort_option': 'effort',
|
||||||
|
});
|
||||||
|
|
||||||
|
final container = await makeContainer();
|
||||||
|
addTearDown(container.dispose);
|
||||||
|
|
||||||
|
expect(container.read(sortPreferenceProvider), TaskSortOption.effort);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('persisted value is loaded on restart (interval)', () async {
|
||||||
|
SharedPreferences.setMockInitialValues({
|
||||||
|
'task_sort_option': 'interval',
|
||||||
|
});
|
||||||
|
|
||||||
|
final container = await makeContainer();
|
||||||
|
addTearDown(container.dispose);
|
||||||
|
|
||||||
|
expect(container.read(sortPreferenceProvider), TaskSortOption.interval);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('unknown persisted value falls back to alphabetical', () async {
|
||||||
|
SharedPreferences.setMockInitialValues({
|
||||||
|
'task_sort_option': 'unknown_value',
|
||||||
|
});
|
||||||
|
|
||||||
|
final container = await makeContainer();
|
||||||
|
addTearDown(container.dispose);
|
||||||
|
|
||||||
|
expect(container.read(sortPreferenceProvider), TaskSortOption.alphabetical);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user