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); }); }); }