mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-08-05 02:28:36 +02:00
feat(album): batch download selected tracks
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:spotiflac_android/l10n/app_localizations.dart';
|
||||
import 'package:spotiflac_android/models/track.dart';
|
||||
import 'package:spotiflac_android/widgets/animation_utils.dart';
|
||||
import 'package:spotiflac_android/widgets/track_detail_actions.dart';
|
||||
import 'package:spotiflac_android/widgets/track_list_tile.dart';
|
||||
|
||||
void main() {
|
||||
test('explicit batch selection forces one provider and quality picker', () {
|
||||
expect(
|
||||
shouldShowBatchDownloadPicker(
|
||||
forceQualityPicker: true,
|
||||
askQualityBeforeDownload: false,
|
||||
allowQualityVariants: false,
|
||||
),
|
||||
isTrue,
|
||||
);
|
||||
});
|
||||
|
||||
const track = Track(
|
||||
id: 'track-1',
|
||||
name: 'Selected song',
|
||||
artistName: 'Artist',
|
||||
albumName: 'Album',
|
||||
duration: 180,
|
||||
trackNumber: 1,
|
||||
);
|
||||
|
||||
Widget buildTile({
|
||||
bool selectionMode = false,
|
||||
bool selected = false,
|
||||
VoidCallback? onToggleSelection,
|
||||
VoidCallback? onEnterSelectionMode,
|
||||
void Function()? onDownload,
|
||||
}) {
|
||||
return ProviderScope(
|
||||
child: MaterialApp(
|
||||
localizationsDelegates: const [
|
||||
AppLocalizations.delegate,
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
],
|
||||
supportedLocales: AppLocalizations.supportedLocales,
|
||||
home: Scaffold(
|
||||
body: TrackListTile(
|
||||
track: track,
|
||||
isInHistory: false,
|
||||
onDownload: ({bool forceQualityPicker = false}) =>
|
||||
onDownload?.call(),
|
||||
leading: const SizedBox(width: 32, child: Text('1')),
|
||||
isSelectionMode: selectionMode,
|
||||
isSelected: selected,
|
||||
onToggleSelection: onToggleSelection,
|
||||
onEnterSelectionMode: onEnterSelectionMode,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
testWidgets('selection mode toggles the row without starting a download', (
|
||||
tester,
|
||||
) async {
|
||||
var toggled = false;
|
||||
var downloaded = false;
|
||||
await tester.pumpWidget(
|
||||
buildTile(
|
||||
selectionMode: true,
|
||||
selected: true,
|
||||
onToggleSelection: () => toggled = true,
|
||||
onDownload: () => downloaded = true,
|
||||
),
|
||||
);
|
||||
|
||||
expect(find.byType(AnimatedSelectionCheckbox), findsOneWidget);
|
||||
await tester.tap(find.text('Selected song'));
|
||||
|
||||
expect(toggled, isTrue);
|
||||
expect(downloaded, isFalse);
|
||||
});
|
||||
|
||||
testWidgets('long press enters selection mode when the caller enables it', (
|
||||
tester,
|
||||
) async {
|
||||
var enteredSelection = false;
|
||||
await tester.pumpWidget(
|
||||
buildTile(onEnterSelectionMode: () => enteredSelection = true),
|
||||
);
|
||||
|
||||
await tester.longPress(find.text('Selected song'));
|
||||
|
||||
expect(enteredSelection, isTrue);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user