| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import 'package:cardash_launcher/core/theme/app_theme.dart';
- import 'package:cardash_launcher/data/models/jellyfin_library.dart';
- import 'package:cardash_launcher/data/services/jellyfin_library_service.dart';
- import 'package:cardash_launcher/features/settings/jellyfin_genre_dialog.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter_test/flutter_test.dart';
- import 'jellyfin_fakes.dart';
- void main() {
- testWidgets('groups genres, caps at five and returns the selection', (
- tester,
- ) async {
- await tester.binding.setSurfaceSize(const Size(1024, 700));
- addTearDown(() => tester.binding.setSurfaceSize(null));
- final gateway = FakeJellyfinLibraryGateway()
- ..genres = const ['Metal', 'Rock', 'Jazz', 'Pop', 'Folk', 'Blues'];
- final library = JellyfinLibraryService(
- connectionProvider: () => testJellyfinConnection,
- gateway: gateway,
- );
- List<JellyfinGenreSelection>? result;
- await tester.pumpWidget(
- MaterialApp(
- theme: AppTheme.light(),
- home: Scaffold(
- body: Builder(
- builder: (context) => Center(
- child: ElevatedButton(
- onPressed: () async {
- result = await showJellyfinGenreDialog(
- context,
- library: library,
- selected: const [],
- );
- },
- child: const Text('Open genres'),
- ),
- ),
- ),
- ),
- ),
- );
- await tester.tap(find.text('Open genres'));
- await tester.pumpAndSettle();
- expect(find.text('Random genres'), findsOneWidget);
- expect(find.text('0 / 5'), findsOneWidget);
- expect(find.text('Metal'), findsOneWidget);
- expect(find.text('Rock'), findsOneWidget);
- expect(find.text('Jazz'), findsOneWidget);
- expect(find.text('Pop'), findsOneWidget);
- expect(find.text('Folk'), findsOneWidget);
- expect(find.text('Blues'), findsOneWidget);
- for (var index = 0; index < 5; index++) {
- await tester.tap(find.byType(Checkbox).at(index));
- await tester.pump();
- }
- expect(find.text('5 / 5'), findsOneWidget);
- expect(find.text('Deselect one to choose another.'), findsOneWidget);
- final sixth = tester.widget<Checkbox>(find.byType(Checkbox).at(5));
- expect(sixth.onChanged, isNull);
- await tester.tap(find.text('Save'));
- await tester.pumpAndSettle();
- expect(result, isNotNull);
- expect(result!.length, 5);
- expect(result!.map((entry) => entry.label), [
- 'Metal',
- 'Rock',
- 'Jazz',
- 'Pop',
- 'Folk',
- ]);
- });
- }
|