mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
test: add volume provider tests
This commit is contained in:
parent
472f379f3d
commit
dcf0c62e5d
@ -37,4 +37,3 @@ analyzer:
|
||||
- "**.g.dart"
|
||||
- "**.gr.dart"
|
||||
- "**/generated_plugin_registrant.dart"
|
||||
- test/**/*.dart
|
||||
|
@ -21,6 +21,7 @@ import 'package:spotube/collections/env.dart';
|
||||
import 'package:spotube/collections/initializers.dart';
|
||||
import 'package:spotube/collections/intents.dart';
|
||||
import 'package:spotube/collections/routes.dart';
|
||||
import 'package:spotube/collections/vars.dart';
|
||||
import 'package:spotube/hooks/configurators/use_close_behavior.dart';
|
||||
import 'package:spotube/hooks/configurators/use_deep_linking.dart';
|
||||
import 'package:spotube/hooks/configurators/use_disable_battery_optimizations.dart';
|
||||
@ -67,13 +68,12 @@ Future<void> main(List<String> rawArgs) async {
|
||||
AppLogger.runZoned(() async {
|
||||
final widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
GetIt.I.registerSingleton<SharedPreferences>(
|
||||
await SharedPreferences.getInstance(),
|
||||
);
|
||||
GetIt.I.registerSingletonWithDependencies<KVStoreService>(
|
||||
getIt.registerSingleton(await SharedPreferences.getInstance());
|
||||
getIt.registerSingletonWithDependencies(
|
||||
() => KVStoreService.init(),
|
||||
dependsOn: [SharedPreferences],
|
||||
);
|
||||
getIt.registerSingleton(SpotubeAudioPlayer());
|
||||
|
||||
await registerWindowsScheme("spotify");
|
||||
|
||||
|
@ -5,25 +5,21 @@ import 'package:spotube/services/audio_player/audio_player.dart';
|
||||
import 'package:spotube/services/kv_store/kv_store.dart';
|
||||
|
||||
class VolumeProvider extends Notifier<double> {
|
||||
final SpotubeAudioPlayer _audioPlayer;
|
||||
|
||||
VolumeProvider({
|
||||
required SpotubeAudioPlayer audioPlayer,
|
||||
}) : _audioPlayer = audioPlayer;
|
||||
VolumeProvider();
|
||||
|
||||
@override
|
||||
build() {
|
||||
_audioPlayer.setVolume(KVStoreService().volume);
|
||||
audioPlayer.setVolume(KVStoreService().volume);
|
||||
return KVStoreService().volume;
|
||||
}
|
||||
|
||||
Future<void> setVolume(double volume) async {
|
||||
state = volume;
|
||||
await _audioPlayer.setVolume(volume);
|
||||
KVStoreService().setVolume(volume);
|
||||
await audioPlayer.setVolume(volume);
|
||||
await KVStoreService().setVolume(volume);
|
||||
}
|
||||
}
|
||||
|
||||
final volumeProvider = NotifierProvider<VolumeProvider, double>(() {
|
||||
return VolumeProvider(audioPlayer: audioPlayer);
|
||||
return VolumeProvider();
|
||||
});
|
||||
|
@ -1,6 +1,7 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:media_kit/media_kit.dart' hide Track;
|
||||
import 'package:spotube/collections/vars.dart';
|
||||
import 'package:spotube/services/logger/logger.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:spotify/spotify.dart' hide Playlist;
|
||||
|
@ -1,6 +1,8 @@
|
||||
part of 'audio_player.dart';
|
||||
|
||||
final audioPlayer = SpotubeAudioPlayer();
|
||||
SpotubeAudioPlayer get audioPlayer {
|
||||
return getIt.get<SpotubeAudioPlayer>();
|
||||
}
|
||||
|
||||
class SpotubeAudioPlayer extends AudioPlayerInterface
|
||||
with SpotubeAudioPlayersStreams {
|
||||
|
@ -7,9 +7,9 @@ import 'package:spotube/models/database/database.dart';
|
||||
import 'package:spotube/services/wm_tools/wm_tools.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
final class KVStoreService {
|
||||
class KVStoreService {
|
||||
factory KVStoreService() {
|
||||
return getIt<KVStoreService>();
|
||||
return getIt.get<KVStoreService>();
|
||||
}
|
||||
|
||||
KVStoreService.init();
|
||||
|
@ -161,7 +161,6 @@ dev_dependencies:
|
||||
pub_api_client: ^3.0.0
|
||||
xml: ^6.5.0
|
||||
io: ^1.0.4
|
||||
test: ^1.25.2
|
||||
mocktail: ^1.0.4
|
||||
drift_dev: ^2.21.0
|
||||
auto_route_generator: ^9.0.0
|
||||
|
@ -1,40 +0,0 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:spotube/provider/volume_provider.dart';
|
||||
import 'package:spotube/services/audio_player/audio_player.dart';
|
||||
import 'package:spotube/services/kv_store/kv_store.dart';
|
||||
|
||||
void main() {
|
||||
late ProviderContainer container;
|
||||
late VolumeProvider volumeProvider;
|
||||
|
||||
setUp(() {
|
||||
container = ProviderContainer();
|
||||
volumeProvider = container.read(volumeProvider.notifier);
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
container.dispose();
|
||||
});
|
||||
|
||||
test('initial volume is set from KVStore', () {
|
||||
expect(container.read(volumeProvider), KVStoreService().volume);
|
||||
});
|
||||
|
||||
test('setVolume updates state and KVStore', () async {
|
||||
const testVolume = 0.75;
|
||||
await volumeProvider.setVolume(testVolume);
|
||||
|
||||
expect(container.read(volumeProvider), testVolume);
|
||||
expect(KVStoreService().volume, testVolume);
|
||||
});
|
||||
|
||||
test('setVolume updates audio player', () async {
|
||||
const testVolume = 0.5;
|
||||
await volumeProvider.setVolume(testVolume);
|
||||
|
||||
// Verify that the audio player's volume was set
|
||||
// Note: This assumes audioPlayer.setVolume is properly mocked or can be verified
|
||||
expect(audioPlayer.volume, testVolume);
|
||||
});
|
||||
}
|
63
test/providers/volume_provider_test.dart
Normal file
63
test/providers/volume_provider_test.dart
Normal file
@ -0,0 +1,63 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
import 'package:spotube/collections/vars.dart';
|
||||
import 'package:spotube/provider/volume_provider.dart';
|
||||
import 'package:spotube/services/audio_player/audio_player.dart';
|
||||
import 'package:spotube/services/kv_store/kv_store.dart';
|
||||
|
||||
class MockSpotubeAudioPlayer extends Mock implements SpotubeAudioPlayer {}
|
||||
|
||||
class MockKVStoreService extends Mock implements KVStoreService {}
|
||||
|
||||
void main() {
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
late ProviderContainer container;
|
||||
late SpotubeAudioPlayer audioPlayer;
|
||||
late KVStoreService kvStoreService;
|
||||
|
||||
setUp(() {
|
||||
kvStoreService =
|
||||
getIt.registerSingleton<KVStoreService>(MockKVStoreService());
|
||||
audioPlayer =
|
||||
getIt.registerSingleton<SpotubeAudioPlayer>(MockSpotubeAudioPlayer());
|
||||
container = ProviderContainer();
|
||||
|
||||
when(() => kvStoreService.volume).thenAnswer((_) => 1.0);
|
||||
when(() => kvStoreService.setVolume(any())).thenAnswer((_) async {});
|
||||
when(() => audioPlayer.setVolume(any())).thenAnswer((_) async {});
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
getIt.reset();
|
||||
container.dispose();
|
||||
});
|
||||
|
||||
group("VolumeProvider", () {
|
||||
test("initial volume should be 1", () {
|
||||
final volume = container.read(volumeProvider);
|
||||
|
||||
expect(volume, 1.0);
|
||||
});
|
||||
|
||||
group("setVolume", () {
|
||||
test("should set volume to specified value", () async {
|
||||
await container.read(volumeProvider.notifier).setVolume(0.5);
|
||||
|
||||
final volume = container.read(volumeProvider);
|
||||
expect(volume, 0.5);
|
||||
});
|
||||
test("should update audioPlayer volume", () {
|
||||
container.read(volumeProvider.notifier).setVolume(0.5);
|
||||
|
||||
verify(() => audioPlayer.setVolume(0.5)).called(1);
|
||||
});
|
||||
test("should persist the volume", () async {
|
||||
await container.read(volumeProvider.notifier).setVolume(0.5);
|
||||
|
||||
verify(() => kvStoreService.setVolume(0.5)).called(1);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
Loading…
Reference in New Issue
Block a user