Files
Melo/test/services/download_service_test.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);
});
});
}