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:myapp/providers/auth_provider.dart'; import 'package:myapp/providers/bank_provider.dart'; import 'package:myapp/providers/theme_provider.dart'; import 'package:myapp/providers/tx_meta_provider.dart'; import 'package:myapp/screens/overview_screen.dart'; import 'package:myapp/screens/transactions_screen.dart'; import 'package:myapp/services/storage_service.dart'; import 'package:myapp/utils/app_config.dart'; import 'package:myapp/utils/app_theme.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); late StorageService storage; late AuthController auth; late BankController bank; late TxMetaController meta; setUp(() async { AppConfig.loadForTest(); SharedPreferences.setMockInitialValues({}); storage = StorageService(); await storage.init(); auth = AuthController(storage); await auth.init(); bank = BankController(storage: storage); // seed a couple txs // ignore: invalid_use_of_visible_for_testing_member meta = TxMetaController(storage); }); testWidgets('overview builds dark', (tester) async { FlutterError.onError = (details) { fail(details.toString()); }; await tester.pumpWidget( MultiProvider( providers: [ ChangeNotifierProvider.value(value: auth), ChangeNotifierProvider(create: (_) => ThemeController(storage)), ChangeNotifierProvider.value(value: meta), ChangeNotifierProvider.value(value: bank), ], child: MaterialApp( theme: AppTheme.light(), darkTheme: AppTheme.dark(), themeMode: ThemeMode.dark, home: const OverviewScreen(), ), ), ); await tester.pump(); await tester.pump(const Duration(seconds: 1)); expect(tester.takeException(), isNull); expect(find.text('Overview'), findsOneWidget); }); testWidgets('transactions builds dark', (tester) async { await tester.pumpWidget( MultiProvider( providers: [ ChangeNotifierProvider.value(value: auth), ChangeNotifierProvider(create: (_) => ThemeController(storage)), ChangeNotifierProvider.value(value: meta), ChangeNotifierProvider.value(value: bank), ], child: MaterialApp( theme: AppTheme.light(), darkTheme: AppTheme.dark(), themeMode: ThemeMode.dark, home: const TransactionsScreen(), ), ), ); await tester.pump(); await tester.pump(const Duration(seconds: 1)); expect(tester.takeException(), isNull); }); }