A whole bunch of changes

This commit is contained in:
Courtney Arnold 2026-08-15 17:52:25 -05:00
parent 901ec678a3
commit 956231048e
122 changed files with 5442 additions and 914 deletions

View file

@ -0,0 +1,64 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:fuel_tax_tracker/screens/ui_settings_screen.dart';
import 'package:fuel_tax_tracker/services/app_state.dart';
/// Covers the light/dark/system theme toggle on the Settings > UI screen —
/// defaults to System, selecting a segment updates [AppState.themeMode]
/// and persists it to SharedPreferences (so it survives a cold start).
///
/// Deliberately doesn't round-trip through a second [AppState.init] to
/// verify persistence — that pulls in unrelated subsystems (connectivity
/// listening, cloud-restore) with no test-environment platform mocks,
/// which hangs rather than failing fast. Reading the pref back directly
/// verifies the same thing without that baggage.
void main() {
setUp(() {
SharedPreferences.setMockInitialValues({});
});
testWidgets('defaults to System and switches to Dark/Light on tap', (tester) async {
final appState = AppState()..isLoading = false;
await tester.pumpWidget(
ChangeNotifierProvider.value(
value: appState,
child: const MaterialApp(home: UiSettingsScreen()),
),
);
expect(appState.themeMode, ThemeMode.system);
await tester.tap(find.text('Dark'));
await tester.pumpAndSettle();
expect(appState.themeMode, ThemeMode.dark);
await tester.tap(find.text('Light'));
await tester.pumpAndSettle();
expect(appState.themeMode, ThemeMode.light);
});
testWidgets('persists the choice to SharedPreferences', (tester) async {
final appState = AppState()..isLoading = false;
await tester.pumpWidget(
ChangeNotifierProvider.value(
value: appState,
child: const MaterialApp(home: UiSettingsScreen()),
),
);
await tester.tap(find.text('Dark'));
await tester.pumpAndSettle();
final prefs = await SharedPreferences.getInstance();
// Mirrors the private `_prefsKeyThemeMode` key in app_state.dart —
// a black-box persistence check necessarily has to know the storage
// key, and this doubles as a guardrail against silently breaking
// already-persisted user settings by renaming it there.
expect(prefs.getString('theme_mode'), 'dark');
});
}