Files
SpotiFLAC-Mobile/test/network_library_button_test.dart
T

118 lines
3.9 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/settings.dart';
import 'package:spotiflac_android/providers/local_library_provider.dart';
import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/screens/network_storage_screen.dart';
import 'package:spotiflac_android/services/library_database.dart';
import 'package:spotiflac_android/services/network_storage_service.dart';
import 'package:spotiflac_android/theme/mornye_theme.dart';
import 'package:spotiflac_android/widgets/app_action_button.dart';
class _Storage extends NetworkStorageService {
@override
Future<List<NetworkEntry>> list(
NetworkConnection c, [
String path = '',
]) async => [];
}
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings(localLibraryEnabled: false);
@override
void setLocalLibraryEnabled(bool enabled) =>
state = state.copyWith(localLibraryEnabled: enabled);
}
class _Library extends LocalLibraryNotifier {
_Library(this._events);
final List<String> _events;
@override
LocalLibraryState build() => LocalLibraryState();
@override
Future<LocalLibrarySource> addSource({
required String path,
required String displayName,
String? bookmark,
String? volumeId,
bool isRemovable = false,
}) async {
_events.add(path);
final source = LocalLibrarySource(
id: 'nas-folder',
path: path,
displayName: displayName,
);
state = state.copyWith(sources: [source]);
return source;
}
@override
Future<void> startSourceScan(
String sourceId, {
bool forceFullScan = false,
}) async {
_events.add('scan:$sourceId');
}
}
void main() {
for (final mornye in [false, true]) {
for (final protocol in [NetworkProtocol.smb, NetworkProtocol.webdav]) {
testWidgets(
'adds selected folder and starts Library scan ($mornye, $protocol)',
(tester) async {
final events = <String>[];
final connection = NetworkConnection(
id: 'nas',
name: 'Home NAS',
protocol: protocol,
address: protocol == NetworkProtocol.smb
? 'smb://nas/Music/'
: 'https://nas/Music/',
);
await tester.pumpWidget(
ProviderScope(
overrides: [
localLibraryProvider.overrideWith(() => _Library(events)),
settingsProvider.overrideWith(_Settings.new),
],
child: MaterialApp(
theme: mornye
? MornyeTheme.build(Brightness.dark)
: ThemeData(),
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
home: NetworkStorageScreen(
connection: connection,
path: 'Albums/',
service: _Storage(),
),
),
),
);
await tester.pumpAndSettle();
await tester.tap(
find.widgetWithText(AppActionButton, 'Add folder to Library'),
);
await tester.pumpAndSettle();
expect(events, ['network://nas/Albums/', 'scan:nas-folder']);
expect(find.text('Folder added to Library'), findsOneWidget);
final container = ProviderScope.containerOf(
tester.element(find.byType(NetworkStorageScreen)),
);
expect(container.read(settingsProvider).localLibraryEnabled, true);
expect(
container.read(localLibraryProvider).sources.single.displayName,
'Home NAS / Albums',
);
expect(tester.takeException(), isNull);
},
);
}
}
}