import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; import 'package:fuel_tax_tracker/screens/data_settings_screen.dart'; import 'package:fuel_tax_tracker/screens/settings_screen.dart'; import 'package:fuel_tax_tracker/screens/ui_settings_screen.dart'; import 'package:fuel_tax_tracker/services/app_state.dart'; /// Covers the Settings landing page's menu wiring: it groups settings into /// two submenus — [UiSettingsScreen] (appearance) and [DataSettingsScreen] /// (cloud storage, photo syncing/quality, advanced/purge) — plus keeps a /// read-only summary on the landing page itself. The submenu screens' /// actual contents are covered by theme_toggle_test.dart and /// settings_purge_test.dart respectively. void main() { Future pumpSettings(WidgetTester tester) async { final appState = AppState()..isLoading = false; await tester.pumpWidget( ChangeNotifierProvider.value( value: appState, child: const MaterialApp(home: SettingsScreen()), ), ); } testWidgets('shows UI and Data menu entries, plus the summary', (tester) async { await pumpSettings(tester); expect(find.text('UI'), findsOneWidget); expect(find.text('Data'), findsOneWidget); expect(find.text('Summary'), findsOneWidget); // None of Data's contents leaked onto the landing page. expect(find.text('Cloud Storage'), findsNothing); expect(find.text('Advanced'), findsNothing); }); testWidgets('tapping UI opens UiSettingsScreen', (tester) async { await pumpSettings(tester); await tester.tap(find.text('UI')); await tester.pumpAndSettle(); expect(find.byType(UiSettingsScreen), findsOneWidget); expect(find.text('Appearance'), findsOneWidget); }); testWidgets('tapping Data opens DataSettingsScreen', (tester) async { await pumpSettings(tester); await tester.tap(find.text('Data')); await tester.pumpAndSettle(); expect(find.byType(DataSettingsScreen), findsOneWidget); expect(find.text('Cloud Storage'), findsOneWidget); await tester.scrollUntilVisible(find.text('Advanced'), 200, scrollable: find.byType(Scrollable)); expect(find.text('Advanced'), findsOneWidget); }); }