mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-10-20 22:41:38 +02:00
Expose playlist, play-next and queue actions across Library search and album selections, including selected artist albums. Sort playlists, keep long selection toolbars scrollable, separate file operations in metadata menus, and show related local songs without online playback.
94 lines
3.4 KiB
Dart
94 lines
3.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:spotiflac_android/l10n/l10n.dart';
|
|
import 'package:spotiflac_android/models/unified_library_item.dart';
|
|
import 'package:spotiflac_android/providers/music_player_provider.dart';
|
|
import 'package:spotiflac_android/services/library_database.dart';
|
|
import 'package:spotiflac_android/theme/mornye_theme.dart';
|
|
import 'package:spotiflac_android/widgets/library_selection_playback_actions.dart';
|
|
import 'package:spotiflac_android/widgets/library_track_selection_bar.dart';
|
|
|
|
class _Controller extends MusicPlayerController {
|
|
List<String> enqueued = [];
|
|
bool insertedNext = false;
|
|
|
|
@override
|
|
Future<void> enqueueLibraryItems(
|
|
List<UnifiedLibraryItem> items, {
|
|
bool playNext = false,
|
|
}) async {
|
|
enqueued = items.map((item) => item.id).toList();
|
|
insertedNext = playNext;
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
for (final mornye in [false, true]) {
|
|
for (final size in [const Size(390, 844), const Size(844, 390)]) {
|
|
testWidgets('batch playback preserves selection order ($mornye, $size)', (
|
|
tester,
|
|
) async {
|
|
tester.view.physicalSize = size;
|
|
tester.view.devicePixelRatio = 1;
|
|
addTearDown(tester.view.reset);
|
|
final controller = _Controller();
|
|
var closed = false;
|
|
final items = [
|
|
for (final id in ['second', 'first'])
|
|
UnifiedLibraryItem.fromLocalLibrary(
|
|
LocalLibraryItem(
|
|
id: id,
|
|
trackName: id,
|
|
artistName: 'Artist',
|
|
albumName: 'Album',
|
|
filePath: 'content://library/$id.flac',
|
|
scannedAt: DateTime(2026),
|
|
),
|
|
),
|
|
];
|
|
await tester.pumpWidget(
|
|
ProviderScope(
|
|
overrides: [
|
|
musicPlayerControllerProvider.overrideWithValue(controller),
|
|
],
|
|
child: MaterialApp(
|
|
theme: mornye ? MornyeTheme.build(Brightness.dark) : ThemeData(),
|
|
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
|
supportedLocales: AppLocalizations.supportedLocales,
|
|
home: Scaffold(
|
|
body: Align(
|
|
alignment: Alignment.bottomCenter,
|
|
child: LibraryTrackSelectionBar(
|
|
selectedCount: 2,
|
|
allSelected: true,
|
|
onClose: () => closed = true,
|
|
onToggleSelectAll: () {},
|
|
bottomPadding: 0,
|
|
onReEnrich: () {},
|
|
onConvert: () {},
|
|
onReplayGain: ({required remove}) {},
|
|
onDelete: () {},
|
|
playbackActions: LibrarySelectionPlaybackActions(
|
|
items: items,
|
|
onClose: () => closed = true,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
await tester.pumpAndSettle();
|
|
expect(tester.takeException(), isNull);
|
|
await tester.tap(find.text('Play next'));
|
|
await tester.pumpAndSettle();
|
|
expect(controller.enqueued, items.map((item) => item.id));
|
|
expect(controller.insertedNext, isTrue);
|
|
expect(closed, isTrue);
|
|
expect(tester.takeException(), isNull);
|
|
});
|
|
}
|
|
}
|
|
}
|