import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:go_router/go_router.dart'; import 'package:mocktail/mocktail.dart'; import 'package:shuffle/core/config/app_config_provider.dart'; import 'package:shuffle/core/l10n/l10n.dart'; import 'package:shuffle/core/supabase/supabase_client_provider.dart'; import 'fakes.dart'; import 'pump_app.dart'; import 'router_helpers.dart'; class _L10nProbe extends StatelessWidget { const _L10nProbe(); @override Widget build(BuildContext context) => Scaffold(body: Text(context.l10n.homePlaceholderMessage)); } void main() { group('pumpApp', () { testWidgets('renders German texts by default', (tester) async { await pumpApp(tester, home: const _L10nProbe()); expect(find.textContaining('Willkommen bei Shuffle'), findsOneWidget); }); testWidgets('renders English texts for Locale en', (tester) async { await pumpApp( tester, home: const _L10nProbe(), locale: const Locale('en'), ); expect(find.textContaining('Welcome to Shuffle'), findsOneWidget); }); testWidgets('falls back to English for unsupported locales', ( tester, ) async { await pumpApp( tester, home: const _L10nProbe(), locale: const Locale('fr'), ); expect(find.textContaining('Welcome to Shuffle'), findsOneWidget); }); testWidgets('applies the text scale factor', (tester) async { await pumpApp(tester, home: const _L10nProbe(), textScale: 2); final context = tester.element(find.byType(_L10nProbe)); expect(MediaQuery.textScalerOf(context).scale(10), 20); }); testWidgets('provides test AppConfig and Supabase mock by default', ( tester, ) async { final container = await pumpApp(tester, home: const _L10nProbe()); expect(container.read(appConfigProvider).termsVersion, 'test-1'); expect(container.read(supabaseClientProvider), isA()); }); testWidgets('accepts a custom GoRouter', (tester) async { final router = buildTestRouter( routes: [ GoRoute(path: '/', builder: (_, _) => const _L10nProbe()), GoRoute(path: '/other', builder: (_, _) => const Text('other')), ], ); addTearDown(router.dispose); await pumpApp(tester, router: router); router.go('/other'); await tester.pumpAndSettle(); expect(currentPath(router), '/other'); expect(find.text('other'), findsOneWidget); }); }); group('SupabaseMocks', () { test('client.auth returns the auth mock', () { final mocks = SupabaseMocks(); when(() => mocks.auth.currentSession).thenReturn(null); expect(mocks.client.auth.currentSession, isNull); verify(() => mocks.auth.currentSession).called(1); }); }); }