import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:motorcycle_dash/core/theme/evolution_theme_config.dart'; import 'package:motorcycle_dash/features/records/records_service.dart'; import 'package:motorcycle_dash/features/dashboard/widgets/evolution_portrait_dashboard.dart'; import 'package:motorcycle_dash/features/records/evolution_records_screen.dart'; import 'package:motorcycle_dash/features/rides/ride_state_machine.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); group('Evolution Theme Configuration Tests', () { test('Default theme is classic without altering existing user experience', () async { SharedPreferences.setMockInitialValues({}); final prefs = await SharedPreferences.getInstance(); final notifier = DashboardThemeModeNotifier(prefs); expect(notifier.state, equals(DashboardThemeMode.classic)); }); test('Toggling theme switches to evolution and persists', () async { SharedPreferences.setMockInitialValues({}); final prefs = await SharedPreferences.getInstance(); final notifier = DashboardThemeModeNotifier(prefs); notifier.setThemeMode(DashboardThemeMode.evolution); expect(notifier.state, equals(DashboardThemeMode.evolution)); final reloaded = DashboardThemeModeNotifier(prefs); expect(reloaded.state, equals(DashboardThemeMode.evolution)); }); }); group('Evolution UI Widgets Rendering Tests', () { testWidgets('EvolutionPortraitDashboard renders speedometer and HUD pods', (tester) async { SharedPreferences.setMockInitialValues({}); final prefs = await SharedPreferences.getInstance(); await tester.pumpWidget( ProviderScope( overrides: [ sharedPreferencesProvider.overrideWithValue(prefs), ], child: MaterialApp( home: Scaffold( body: EvolutionPortraitDashboard( currentSpeedMph: 136.0, heading: 355.0, leanAngle: 48.0, accelG: 0.98, lateralG: 1.12, session: RideSession( state: RideState.idle, tripDistanceMiles: 145.2, topSpeedMph: 168.0, averageSpeedMph: 87.0, maxLeanLeft: 52.0, maxLeanRight: 49.0, startTime: null, ), ), ), ), ), ); await tester.pumpAndSettle(); expect(find.text('136'), findsOneWidget); expect(find.text('MPH'), findsOneWidget); expect(find.text('FIXED'), findsOneWidget); expect(find.text('HEADSET'), findsOneWidget); expect(find.text('BRAKING'), findsOneWidget); expect(find.text('CORNERING'), findsOneWidget); expect(find.text('LEAN ANGLE'), findsOneWidget); expect(find.text('START SESSION'), findsOneWidget); }); testWidgets('EvolutionRecordsScreen renders speed records and performance times', (tester) async { tester.view.physicalSize = const Size(1080, 2400); tester.view.devicePixelRatio = 1.0; addTearDown(() => tester.view.resetPhysicalSize()); SharedPreferences.setMockInitialValues({}); final prefs = await SharedPreferences.getInstance(); await tester.pumpWidget( ProviderScope( overrides: [ sharedPreferencesProvider.overrideWithValue(prefs), ], child: const MaterialApp( home: EvolutionRecordsScreen(), ), ), ); await tester.pumpAndSettle(); expect(find.text('MOTOR SIGNAL'), findsOneWidget); expect(find.text('PERSONAL RECORDS'), findsOneWidget); expect(find.text('TOP SPEED'), findsOneWidget); expect(find.text('0-60'), findsOneWidget); expect(find.text('0-100'), findsOneWidget); expect(find.text('MAX LEAN LEFT'), findsOneWidget); }); }); }