82 lines
2.6 KiB
Dart
82 lines
2.6 KiB
Dart
import 'package:drift/native.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:melo/library/database.dart';
|
|
import 'package:melo/services/download_service.dart';
|
|
import 'package:melo/services/download_speicher.dart';
|
|
import 'package:melo/services/navidrome_service.dart';
|
|
|
|
void main() {
|
|
group('brauchtRueckfrage', () {
|
|
test('ein Album geht ohne Nachfrage durch', () {
|
|
// Zehn bis zwanzig Titel — da wäre eine Rückfrage nur im Weg.
|
|
expect(brauchtRueckfrage(12), isFalse);
|
|
expect(brauchtRueckfrage(29), isFalse);
|
|
});
|
|
|
|
test('ab der Schwelle wird gefragt', () {
|
|
expect(brauchtRueckfrage(rueckfrageAb), isTrue);
|
|
});
|
|
|
|
test('ein ganzer Künstler wird immer erfragt', () {
|
|
// Mehrere hundert Titel und einige Gigabyte darf niemand aus Versehen
|
|
// antippen.
|
|
expect(brauchtRueckfrage(347), isTrue);
|
|
});
|
|
|
|
test('nichts auszuwählen fragt nicht', () {
|
|
expect(brauchtRueckfrage(0), isFalse);
|
|
});
|
|
});
|
|
|
|
group('geschaetzteBytes', () {
|
|
test('rechnet die Dauer in eine Hausnummer um', () {
|
|
// 200 s bei rund 256 kbit/s ≈ 6,4 MB.
|
|
expect(geschaetzteBytes([200]), 6400000);
|
|
});
|
|
|
|
test('zählt mehrere Titel zusammen', () {
|
|
expect(geschaetzteBytes([100, 100]), geschaetzteBytes([200]));
|
|
});
|
|
|
|
test('ohne Titel ist die Schätzung null', () {
|
|
expect(geschaetzteBytes(const []), 0);
|
|
});
|
|
});
|
|
|
|
group('DownloadSpeicher.dateiName', () {
|
|
test('hängt nur an der Server-ID, nicht an der Stream-Adresse', () {
|
|
// Die Adresse trägt bei jedem App-Start ein neues Token — als
|
|
// Schlüssel wäre die Datei nie wiederzufinden.
|
|
expect(DownloadSpeicher.dateiName('abc'),
|
|
DownloadSpeicher.dateiName('abc'));
|
|
expect(DownloadSpeicher.dateiName('abc'),
|
|
isNot(DownloadSpeicher.dateiName('xyz')));
|
|
});
|
|
|
|
test('endet auf .mp3, damit der Player den Typ erkennt', () {
|
|
expect(DownloadSpeicher.dateiName('abc'), endsWith('.mp3'));
|
|
});
|
|
});
|
|
|
|
group('ladeEinzelnenTitel', () {
|
|
test('ohne Serververbindung wird nichts geladen und der Grund steht da',
|
|
() async {
|
|
final db = MeloDb(NativeDatabase.memory());
|
|
addTearDown(db.close);
|
|
final dienst = DownloadService(db: db, navidrome: NavidromeService());
|
|
|
|
final neu = await dienst.ladeEinzelnenTitel(const SubsonicSong(
|
|
id: 'nav-1',
|
|
titel: 'Nachtpuls',
|
|
kuenstler: 'Rotklang',
|
|
album: 'Nacht',
|
|
dauerSekunden: 200,
|
|
));
|
|
|
|
expect(neu, isFalse);
|
|
expect(dienst.fehler, contains('Musikserver'));
|
|
expect(await db.downloadIds(), isEmpty);
|
|
});
|
|
});
|
|
}
|