mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-08-02 09:08:35 +02:00
108 lines
3.5 KiB
Dart
108 lines
3.5 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:flutter/services.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:spotiflac_android/services/platform_bridge.dart';
|
|
|
|
void main() {
|
|
TestWidgetsFlutterBinding.ensureInitialized();
|
|
const backendChannel = MethodChannel('com.zarz.spotiflac/backend');
|
|
|
|
tearDown(() async {
|
|
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
|
.setMockMethodCallHandler(backendChannel, null);
|
|
});
|
|
|
|
test('display metadata uses the lightweight scan result directly', () async {
|
|
final invokedMethods = <String>[];
|
|
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
|
.setMockMethodCallHandler(backendChannel, (call) async {
|
|
invokedMethods.add(call.method);
|
|
if (call.method == 'readAudioMetadata') {
|
|
return jsonEncode({
|
|
'trackName': 'Song',
|
|
'artistName': 'Artist',
|
|
'bitDepth': 24,
|
|
'sampleRate': 96000,
|
|
'bitrate': 1800,
|
|
'format': 'flac',
|
|
});
|
|
}
|
|
fail('Unexpected full metadata read: ${call.method}');
|
|
});
|
|
|
|
final result = await PlatformBridge.readDisplayAudioMetadata(
|
|
'content://downloads/song.flac',
|
|
);
|
|
|
|
expect(invokedMethods, ['readAudioMetadata']);
|
|
expect(result['title'], 'Song');
|
|
expect(result['artist'], 'Artist');
|
|
expect(result['bit_depth'], 24);
|
|
expect(result['sample_rate'], 96000);
|
|
expect(result['audio_codec'], 'flac');
|
|
});
|
|
|
|
test(
|
|
'display metadata falls back when scan only parsed the filename',
|
|
() async {
|
|
final invokedMethods = <String>[];
|
|
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
|
.setMockMethodCallHandler(backendChannel, (call) async {
|
|
invokedMethods.add(call.method);
|
|
if (call.method == 'readAudioMetadata') {
|
|
return jsonEncode({
|
|
'trackName': 'Filename fallback',
|
|
'metadataFromFilename': true,
|
|
'format': 'flac',
|
|
});
|
|
}
|
|
if (call.method == 'readFileMetadata') {
|
|
return jsonEncode({
|
|
'title': 'Embedded title',
|
|
'audio_codec': 'opus',
|
|
});
|
|
}
|
|
fail('Unexpected method: ${call.method}');
|
|
});
|
|
|
|
final result = await PlatformBridge.readDisplayAudioMetadata(
|
|
'content://downloads/misnamed.flac',
|
|
);
|
|
|
|
expect(invokedMethods, ['readAudioMetadata', 'readFileMetadata']);
|
|
expect(result['title'], 'Embedded title');
|
|
expect(result['audio_codec'], 'opus');
|
|
},
|
|
);
|
|
|
|
test('metadata search sends the explicitly selected extension', () async {
|
|
MethodCall? capturedCall;
|
|
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
|
.setMockMethodCallHandler(backendChannel, (call) async {
|
|
capturedCall = call;
|
|
return jsonEncode([
|
|
{
|
|
'id': 'track-1',
|
|
'name': 'Song',
|
|
'provider_id': 'selected-metadata',
|
|
},
|
|
]);
|
|
});
|
|
|
|
final results = await PlatformBridge.searchTracksWithMetadataProvider(
|
|
'selected-metadata',
|
|
'Song Artist',
|
|
limit: 5,
|
|
);
|
|
|
|
expect(capturedCall?.method, 'searchTracksWithMetadataProvider');
|
|
expect(capturedCall?.arguments, {
|
|
'extension_id': 'selected-metadata',
|
|
'query': 'Song Artist',
|
|
'limit': 5,
|
|
});
|
|
expect(results.single['provider_id'], 'selected-metadata');
|
|
});
|
|
}
|