import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:http/http.dart' as http; import 'package:http/testing.dart'; import 'package:melo/downloads/downloads_screen.dart'; import 'package:melo/services/baka_auth.dart'; import 'package:melo/services/yt_download_service.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; class _MemorySpeicher implements TokenSpeicher { final Map werte = {}; @override Future lesen(String key) async => werte[key]; @override Future schreiben(String key, String wert) async => werte[key] = wert; @override Future loeschen(String key) async => werte.remove(key); } Widget _wrap(BakaAuth auth) { return MultiProvider( providers: [ ChangeNotifierProvider.value(value: auth), ChangeNotifierProvider( create: (_) => YtDownloadService( auth: auth, client: MockClient((_) async => http.Response('', 500)), ), ), ], child: const MaterialApp(home: Scaffold(body: DownloadsScreen())), ); } void main() { setUp(() => SharedPreferences.setMockInitialValues({})); testWidgets('Online-Tab hat die Unterreiter YouTube und Server', (tester) async { final auth = BakaAuth(client: MockClient((_) async => http.Response('', 500)), speicher: _MemorySpeicher()); await tester.pumpWidget(_wrap(auth)); await tester.pump(); expect(find.text('YouTube'), findsOneWidget); expect(find.text('Server'), findsOneWidget); }); testWidgets('Ohne Anmeldung fordert der YouTube-Bereich zum Anmelden auf', (tester) async { final auth = BakaAuth(client: MockClient((_) async => http.Response('', 500)), speicher: _MemorySpeicher()); await tester.pumpWidget(_wrap(auth)); await tester.pump(); expect(find.text('Beim Baka-Konto anmelden'), findsOneWidget); expect(find.byType(TextField), findsNothing); }); testWidgets('Angemeldet zeigt der YouTube-Bereich das Adressfeld', (tester) async { final auth = BakaAuth( client: MockClient( (_) async => http.Response(jsonEncode({'token': 'jwt'}), 200)), speicher: _MemorySpeicher(), ); await auth.anmelden('Baka', 'geheim'); await tester.pumpWidget(_wrap(auth)); await tester.pump(); expect(find.text('Angemeldet als Baka'), findsOneWidget); expect(find.byType(TextField), findsOneWidget); expect(find.text('Herunterladen'), findsOneWidget); }); }