bible-tracker/test/screens/home_screen_test.dart
2026-04-20 14:39:49 -04:00

46 lines
1.7 KiB
Dart

import 'package:bible_tracker/screens/home_screen.dart';
import 'package:bible_tracker/services/tracker_service.dart';
import 'package:bible_tracker/services/tracker_storage.dart';
import 'package:bible_tracker/widgets/theme.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
Future<Widget> _wrapped() async {
SharedPreferences.setMockInitialValues(<String, Object>{});
final prefs = await SharedPreferences.getInstance();
return ProviderScope(
overrides: <Override>[sharedPreferencesProvider.overrideWithValue(prefs)],
child: MaterialApp(theme: AppTheme.light(), home: const HomeScreen()),
);
}
void main() {
testWidgets('shows empty state when no trackers exist', (tester) async {
await tester.pumpWidget(await _wrapped());
await tester.pumpAndSettle();
expect(find.text('Start your first tracker'), findsOneWidget);
expect(find.text('New Tracker'), findsOneWidget);
});
testWidgets('creating a tracker shows it on the list', (tester) async {
await tester.pumpWidget(await _wrapped());
await tester.pumpAndSettle();
final ProviderScope scope = tester.widget<ProviderScope>(
find.byType(ProviderScope),
);
expect(scope, isNotNull);
final BuildContext context = tester.element(find.byType(HomeScreen));
final ProviderContainer container = ProviderScope.containerOf(context);
await container
.read(trackerServiceProvider.notifier)
.create(name: 'My Plan', color: const Color(0xFF3F51B5));
await tester.pumpAndSettle();
expect(find.text('My Plan'), findsOneWidget);
expect(find.text('0%'), findsOneWidget);
});
}