88 lines
2.8 KiB
Dart
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);
|
|
});
|
|
});
|
|
}
|