Shuffle/app/test/helpers/helpers_test.dart
cschlaefke adf61b3ba2 test: add pumpApp helpers, fakes and coverage matrix template
Refs #31

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-02 20:21:55 +01:00

88 lines
2.8 KiB
Dart

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<MockSupabaseClient>());
});
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);
});
});
}