Files
plezy/test/screens/libraries/library_quick_picker_sheet_test.dart
T
edde746 364cdea59b refactor(libraries): show server labels with one policy in the picker and the dropdown
The library quick picker and the libraries dropdown each hand-rolled their own BackendBadge + server-name label rendering with divergent show-when policies: the picker only labeled libraries whose titles collided, so a uniquely-titled library on a multi-server list showed its server in the dropdown but not in the picker.

Both surfaces now share library_server_label.dart — one label widget, one grouping loop over groupLibrariesByFirstAppearance, and one policy: group headers whenever the visible list spans more than one server, per-row labels only in ungrouped lists. The picker's duplicate-title heuristic is gone; its test now pins the unified policy.
2026-08-16 16:48:02 +02:00

95 lines
2.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:plezy/media/media_backend.dart';
import 'package:plezy/media/media_kind.dart';
import 'package:plezy/media/media_library.dart';
import 'package:plezy/screens/libraries/library_quick_picker_sheet.dart';
void main() {
testWidgets('groups libraries by server and reports selection', (tester) async {
final libraries = [
const MediaLibrary(
id: '1',
backend: MediaBackend.plex,
title: 'Movies',
kind: MediaKind.movie,
serverId: 'plex-server',
serverName: 'Plex Server',
),
const MediaLibrary(
id: '2',
backend: MediaBackend.jellyfin,
title: 'Shows',
kind: MediaKind.show,
serverId: 'jellyfin-server',
serverName: 'Jellyfin Server',
),
];
String? selectedKey;
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: LibraryQuickPickerSheet(
libraries: libraries,
selectedLibraryKey: libraries.last.globalKey,
isLoading: false,
groupByServer: true,
emptyMessage: 'No libraries',
onSelected: (key) => selectedKey = key,
),
),
),
);
expect(find.text('Plex Server'), findsOneWidget);
expect(find.text('Jellyfin Server'), findsOneWidget);
expect(find.text('Movies'), findsOneWidget);
expect(find.text('Shows'), findsOneWidget);
await tester.tap(find.text('Movies'));
expect(selectedKey, libraries.first.globalKey);
});
testWidgets('shows per-row server names without grouping when multiple servers are visible', (tester) async {
final libraries = [
const MediaLibrary(
id: '1',
backend: MediaBackend.plex,
title: 'Movies',
kind: MediaKind.movie,
serverId: 'plex-server',
serverName: 'Plex Server',
),
const MediaLibrary(
id: '2',
backend: MediaBackend.jellyfin,
title: 'Shows',
kind: MediaKind.show,
serverId: 'jellyfin-server',
serverName: 'Jellyfin Server',
),
];
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: LibraryQuickPickerSheet(
libraries: libraries,
selectedLibraryKey: null,
isLoading: false,
groupByServer: false,
emptyMessage: 'No libraries',
onSelected: (_) {},
),
),
),
);
expect(find.text('Movies'), findsOneWidget);
expect(find.text('Shows'), findsOneWidget);
expect(find.text('Plex Server'), findsOneWidget);
expect(find.text('Jellyfin Server'), findsOneWidget);
});
}