test: share one FixedSettingsNotifier across tests

Replace 16 private SettingsNotifier fakes that only returned a fixed AppSettings with test/support/fixed_settings.dart. Mornye owner WIP tests and bespoke fakes are untouched.
This commit is contained in:
zarzet committed 2026-10-18 22:08:02 +07:00
1 parent 77c149eb20
commit e41e6ec432
18 files changed
+100 -112

No files matched your search

@@ -16,6 +16,7 @@ import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/screens/mornye_library_screen.dart';
import 'package:spotiflac_android/theme/mornye_theme.dart';
import '../test/support/fixed_settings.dart';
import '../test/support/library_paging_fixture.dart';
import 'performance_probe.dart';
@@ -28,11 +29,6 @@ const _request = (
completeness: null,
);
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings(localLibraryEnabled: true);
}
class _History extends DownloadHistoryNotifier {
@override
DownloadHistoryState build() => DownloadHistoryState();
@@ -197,7 +193,11 @@ void main() {
child: ProviderScope(
key: ValueKey(mountNumber++),
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(
() => FixedSettingsNotifier(
const AppSettings(localLibraryEnabled: true),
),
),
downloadHistoryProvider.overrideWith(_History.new),
localLibraryProvider.overrideWith(_Local.new),
libraryBrowsePageLoaderProvider.overrideWithValue(readPage),
+2 -6
View File
@@ -8,11 +8,7 @@ import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/screens/settings/metadata_settings_page.dart';
import 'package:spotiflac_android/utils/artist_utils.dart';
/// Skips loading persisted settings; mode changes use the real validation.
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings();
}
import 'support/fixed_settings.dart';
void main() {
setUp(() => SharedPreferences.setMockInitialValues({}));
@@ -35,7 +31,7 @@ void main() {
tester.view.devicePixelRatio = 1;
addTearDown(tester.view.reset);
final container = ProviderContainer(
overrides: [settingsProvider.overrideWith(_Settings.new)],
overrides: [settingsProvider.overrideWith(FixedSettingsNotifier.new)],
);
addTearDown(container.dispose);
await tester.pumpWidget(
+4 -8
View File
@@ -3,7 +3,6 @@ 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/download_item.dart';
import 'package:spotiflac_android/models/settings.dart';
import 'package:spotiflac_android/models/track.dart';
import 'package:spotiflac_android/providers/download_queue_provider.dart';
import 'package:spotiflac_android/providers/library_collections_provider.dart';
@@ -18,6 +17,8 @@ import 'package:spotiflac_android/widgets/album_detail_header.dart';
import 'package:spotiflac_android/widgets/track_list_tile.dart';
import 'package:spotiflac_android/widgets/track_detail_actions.dart';
import 'support/fixed_settings.dart';
const _track = Track(
id: 'example-track',
name: 'Example song',
@@ -26,11 +27,6 @@ const _track = Track(
duration: 180,
);
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings();
}
class _Collections extends LibraryCollectionsNotifier {
var _batchCalls = 0;
@override
@@ -89,7 +85,7 @@ void main() {
final snapshot = Provider<DownloadQueueLookup>((ref) => lookup);
final container = ProviderContainer(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(FixedSettingsNotifier.new),
libraryCollectionsProvider.overrideWith(_Collections.new),
currentMediaItemProvider.overrideWith((ref) => Stream.value(null)),
downloadQueueLookupProvider.overrideWith(
@@ -204,7 +200,7 @@ void main() {
final collections = _Collections();
final container = ProviderContainer(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(FixedSettingsNotifier.new),
libraryCollectionsProvider.overrideWith(() => collections),
recentAccessProvider.overrideWith(_Recent.new),
currentMediaItemProvider.overrideWith((ref) => Stream.value(null)),
+4 -8
View File
@@ -1,17 +1,13 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:spotiflac_android/models/download_item.dart';
import 'package:spotiflac_android/models/settings.dart';
import 'package:spotiflac_android/models/track.dart';
import 'package:spotiflac_android/providers/download_queue_provider.dart';
import 'package:spotiflac_android/providers/extension_provider.dart';
import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/services/source_deletion_events.dart';
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings();
}
import 'support/fixed_settings.dart';
class _Extensions extends ExtensionNotifier {
@override
@@ -109,7 +105,7 @@ void main() {
);
final container = ProviderContainer(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(FixedSettingsNotifier.new),
downloadQueueProvider.overrideWith(() => _Queue(initial)),
],
);
@@ -145,7 +141,7 @@ void main() {
);
final container = ProviderContainer(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(FixedSettingsNotifier.new),
extensionProvider.overrideWith(_Extensions.new),
downloadQueueProvider.overrideWith(
() => _Queue(
@@ -194,7 +190,7 @@ void main() {
final initial = const DownloadQueueState().copyWith(items: [item]);
final container = ProviderContainer(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(FixedSettingsNotifier.new),
downloadQueueProvider.overrideWith(() => _Queue(initial)),
],
);
+3 -7
View File
@@ -4,16 +4,12 @@ import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:spotiflac_android/models/download_item.dart';
import 'package:spotiflac_android/models/settings.dart';
import 'package:spotiflac_android/models/track.dart';
import 'package:spotiflac_android/providers/download_queue_provider.dart';
import 'package:spotiflac_android/providers/extension_provider.dart';
import 'package:spotiflac_android/providers/settings_provider.dart';
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings();
}
import 'support/fixed_settings.dart';
class _Queue extends DownloadQueueNotifier {
@override
@@ -75,7 +71,7 @@ void main() {
final container = ProviderContainer(
overrides: [
downloadQueueProvider.overrideWith(() => queue),
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(FixedSettingsNotifier.new),
extensionProvider.overrideWith(() => extensions),
],
);
@@ -120,7 +116,7 @@ void main() {
final container = ProviderContainer(
overrides: [
downloadQueueProvider.overrideWith(() => queue),
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(FixedSettingsNotifier.new),
extensionProvider.overrideWith(() => extensions),
],
);
+9 -7
View File
@@ -12,6 +12,8 @@ import 'package:spotiflac_android/providers/download_queue_provider.dart';
import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/services/app_state_database.dart';
import 'support/fixed_settings.dart';
const _earlyTrack = Track(
id: 'example:early',
name: 'Immediate addition',
@@ -20,12 +22,6 @@ const _earlyTrack = Track(
duration: 180,
);
class _Settings extends SettingsNotifier {
@override
AppSettings build() =>
const AppSettings(downloadDirectory: '/fixture/output');
}
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
test(
@@ -147,7 +143,13 @@ void main() {
});
addTearDown(() => messenger.setMockMethodCallHandler(sqlite, null));
ProviderContainer scope() => ProviderContainer(
overrides: [settingsProvider.overrideWith(_Settings.new)],
overrides: [
settingsProvider.overrideWith(
() => FixedSettingsNotifier(
const AppSettings(downloadDirectory: '/fixture/output'),
),
),
],
);
final container = scope();
+16 -8
View File
@@ -13,11 +13,7 @@ import 'package:spotiflac_android/providers/download_queue_provider.dart';
import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/services/platform_bridge.dart';
class _Settings extends SettingsNotifier {
@override
AppSettings build() =>
const AppSettings(downloadDirectory: '/fixture/output');
}
import 'support/fixed_settings.dart';
class _Queue extends DownloadQueueNotifier {
_Queue(this._items);
@@ -165,7 +161,11 @@ void main() {
];
final container = ProviderContainer(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(
() => FixedSettingsNotifier(
const AppSettings(downloadDirectory: '/fixture/output'),
),
),
downloadQueueProvider.overrideWith(() => _Queue(initial)),
],
);
@@ -249,7 +249,11 @@ void main() {
];
final container = ProviderContainer(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(
() => FixedSettingsNotifier(
const AppSettings(downloadDirectory: '/fixture/output'),
),
),
downloadQueueProvider.overrideWith(() => _Queue(initial)),
],
);
@@ -353,7 +357,11 @@ void main() {
];
final container = ProviderContainer(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(
() => FixedSettingsNotifier(
const AppSettings(downloadDirectory: '/fixture/output'),
),
),
downloadQueueProvider.overrideWith(() => _Queue(initial)),
],
);
+4 -8
View File
@@ -3,12 +3,13 @@ import 'package:flutter/cupertino.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/settings.dart';
import 'package:spotiflac_android/providers/extension_provider.dart';
import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/theme/mornye_theme.dart';
import 'package:spotiflac_android/widgets/download_service_picker.dart';
import 'support/fixed_settings.dart';
class _Extensions extends ExtensionNotifier {
_Extensions(
this._qualityCount, {
@@ -87,11 +88,6 @@ class _Extensions extends ExtensionNotifier {
}
}
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings();
}
void main() {
for (final (qualityCount, mornye) in [
(3, false),
@@ -110,7 +106,7 @@ void main() {
ProviderScope(
overrides: [
extensionProvider.overrideWith(() => _Extensions(qualityCount)),
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(FixedSettingsNotifier.new),
],
child: MaterialApp(
theme: mornye
@@ -190,7 +186,7 @@ void main() {
ProviderScope(
overrides: [
extensionProvider.overrideWith(() => extensions),
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(FixedSettingsNotifier.new),
],
child: MaterialApp(
theme: MornyeTheme.build(brightness),
+2 -6
View File
@@ -5,16 +5,12 @@ import 'package:flutter/services.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/settings.dart';
import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/theme/mornye_theme.dart';
import 'package:spotiflac_android/utils/extension_action_forms.dart';
import 'package:spotiflac_android/widgets/app_bottom_sheet.dart';
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings();
}
import 'support/fixed_settings.dart';
void main() {
const channel = MethodChannel('com.zarz.spotiflac/backend');
@@ -30,7 +26,7 @@ void main() {
}) {
return tester.pumpWidget(
ProviderScope(
overrides: [settingsProvider.overrideWith(_Settings.new)],
overrides: [settingsProvider.overrideWith(FixedSettingsNotifier.new)],
child: MaterialApp(
theme: mornye ? MornyeTheme.build(Brightness.dark) : ThemeData(),
localizationsDelegates: AppLocalizations.localizationsDelegates,
+2 -6
View File
@@ -2,7 +2,6 @@ import 'package:flutter/material.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/settings.dart';
import 'package:spotiflac_android/providers/extension_provider.dart';
import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/screens/settings/download_fallback_extensions_page.dart';
@@ -12,10 +11,7 @@ import 'package:spotiflac_android/screens/settings/provider_priority_page.dart';
import 'package:spotiflac_android/theme/mornye_theme.dart';
import 'package:spotiflac_android/widgets/settings_group.dart';
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings();
}
import 'support/fixed_settings.dart';
class _Extensions extends ExtensionNotifier {
_Extensions(this.extension);
@@ -70,7 +66,7 @@ void main() {
await tester.pumpWidget(
ProviderScope(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(FixedSettingsNotifier.new),
extensionProvider.overrideWith(
() => _Extensions(
extension.copyWith(
+2 -6
View File
@@ -7,17 +7,13 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:spotiflac_android/l10n/app_localizations.dart';
import 'package:spotiflac_android/models/settings.dart';
import 'package:spotiflac_android/providers/extension_provider.dart';
import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/screens/settings/extension_detail_page.dart';
import 'package:spotiflac_android/theme/mornye_theme.dart';
import 'package:spotiflac_android/widgets/settings_group.dart';
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings();
}
import 'support/fixed_settings.dart';
class _Extensions extends ExtensionNotifier {
@override
@@ -109,7 +105,7 @@ void main() {
await tester.pumpWidget(
ProviderScope(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(FixedSettingsNotifier.new),
extensionProvider.overrideWith(_Extensions.new),
],
child: MaterialApp(
@@ -3,12 +3,13 @@ import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:spotiflac_android/models/settings.dart';
import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/providers/track_provider.dart';
import 'package:spotiflac_android/services/platform_bridge.dart';
import 'package:spotiflac_android/utils/extension_auth_launcher.dart';
import 'support/fixed_settings.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
const channel = MethodChannel('plugins.flutter.io/url_launcher');
@@ -114,7 +115,7 @@ void main() {
return true;
});
final container = ProviderContainer(
overrides: [settingsProvider.overrideWith(_Settings.new)],
overrides: [settingsProvider.overrideWith(FixedSettingsNotifier.new)],
);
addTearDown(container.dispose);
await container
@@ -130,8 +131,3 @@ void main() {
},
);
}
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings();
}
+6 -6
View File
@@ -8,14 +8,10 @@ import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/services/album_completeness.dart';
import 'package:spotiflac_android/services/library_queue_store.dart';
import 'support/fixed_settings.dart';
import 'support/library_paging_fixture.dart';
import 'support/sqlite_process_database.dart';
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings(localLibraryEnabled: true);
}
class _History extends DownloadHistoryNotifier {
@override
DownloadHistoryState build() => DownloadHistoryState();
@@ -102,7 +98,11 @@ void main() {
var returned = 0;
final container = ProviderContainer(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(
() => FixedSettingsNotifier(
const AppSettings(localLibraryEnabled: true),
),
),
downloadHistoryProvider.overrideWith(_History.new),
localLibraryProvider.overrideWith(_Local.new),
libraryBrowsePageLoaderProvider.overrideWithValue((page) async {
+6 -5
View File
@@ -16,10 +16,7 @@ import 'package:spotiflac_android/theme/mornye_theme.dart';
import 'package:spotiflac_android/widgets/app_loading_indicator.dart';
import 'package:spotiflac_android/widgets/settings_group.dart';
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings(localLibraryEnabled: true);
}
import 'support/fixed_settings.dart';
class _Library extends LocalLibraryNotifier {
_Library(this._initial, this._cleanup);
@@ -92,7 +89,11 @@ Future<void> _mount(
await tester.pumpWidget(
ProviderScope(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(
() => FixedSettingsNotifier(
const AppSettings(localLibraryEnabled: true),
),
),
localLibraryProvider.overrideWith(() => library),
downloadHistoryProvider.overrideWith(() => history),
],
+2 -6
View File
@@ -2,7 +2,6 @@ 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/settings_provider.dart';
import 'package:spotiflac_android/providers/weekly_releases_provider.dart';
import 'package:spotiflac_android/screens/listening_statistics_screen.dart';
@@ -12,10 +11,7 @@ import 'package:spotiflac_android/services/weekly_releases.dart';
import 'package:spotiflac_android/theme/mornye_theme.dart';
import 'package:spotiflac_android/widgets/player_artwork.dart';
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings();
}
import 'support/fixed_settings.dart';
void main() {
for (final mornye in [false, true]) {
@@ -32,7 +28,7 @@ void main() {
await tester.pumpWidget(
ProviderScope(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(FixedSettingsNotifier.new),
listeningSummaryProvider.overrideWith((ref, period) async {
requested.add(period);
return ListeningSummary.fromRows([
+13 -6
View File
@@ -23,10 +23,7 @@ import 'package:spotiflac_android/widgets/cached_cover_image.dart';
import 'package:spotiflac_android/widgets/local_library_artwork_builder.dart';
import 'package:spotiflac_android/widgets/mornye_artist_header.dart';
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings(localLibraryEnabled: false);
}
import 'support/fixed_settings.dart';
class _History extends DownloadHistoryNotifier {
@override
@@ -79,7 +76,13 @@ void main() {
});
Widget app(Widget home, {bool mornye = false}) => ProviderScope(
overrides: [settingsProvider.overrideWith(_Settings.new)],
overrides: [
settingsProvider.overrideWith(
() => FixedSettingsNotifier(
const AppSettings(localLibraryEnabled: false),
),
),
],
child: MaterialApp(
theme: mornye ? MornyeTheme.build(Brightness.light) : AppTheme.light(),
localizationsDelegates: AppLocalizations.localizationsDelegates,
@@ -305,7 +308,11 @@ void main() {
await tester.pumpWidget(
ProviderScope(
overrides: [
settingsProvider.overrideWith(_Settings.new),
settingsProvider.overrideWith(
() => FixedSettingsNotifier(
const AppSettings(localLibraryEnabled: false),
),
),
downloadHistoryProvider.overrideWith(_History.new),
libraryBrowsePageLoaderProvider.overrideWithValue(
(request) async => LibraryBrowsePage([
+4 -6
View File
@@ -3,17 +3,13 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:spotiflac_android/l10n/app_localizations.dart';
import 'package:spotiflac_android/models/settings.dart';
import 'package:spotiflac_android/providers/settings_provider.dart';
import 'package:spotiflac_android/screens/settings/metadata_separator_settings_page.dart';
import 'package:spotiflac_android/theme/mornye_theme.dart';
import 'package:spotiflac_android/widgets/app_bottom_sheet.dart';
import 'package:spotiflac_android/widgets/settings_group.dart';
class _Settings extends SettingsNotifier {
@override
AppSettings build() => const AppSettings();
}
import 'support/fixed_settings.dart';
void main() {
setUp(() => SharedPreferences.setMockInitialValues({}));
@@ -26,7 +22,9 @@ void main() {
tester.view.devicePixelRatio = 1;
addTearDown(tester.view.reset);
final container = ProviderContainer(
overrides: [settingsProvider.overrideWith(_Settings.new)],
overrides: [
settingsProvider.overrideWith(FixedSettingsNotifier.new),
],
);
addTearDown(container.dispose);
await tester.pumpWidget(
+12
View File
@@ -0,0 +1,12 @@
import 'package:spotiflac_android/models/settings.dart';
import 'package:spotiflac_android/providers/settings_provider.dart';
/// Skips loading persisted settings and serves [initial] unchanged.
class FixedSettingsNotifier extends SettingsNotifier {
FixedSettingsNotifier([this.initial = const AppSettings()]);
final AppSettings initial;
@override
AppSettings build() => initial;
}