import 'package:drift/native.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:melo/library/database.dart'; import 'package:melo/library/song_detail_sheet.dart'; import 'package:melo/services/musicbrainz_service.dart'; Song _song() => Song( id: 'song-1', path: '/musik/a.mp3', title: 'Nachtpuls', artist: 'Rotklang', album: 'Schwarz', dateAddedMs: 7, updatedAtMs: 7, deleted: false, playCount: 0, categoriesEdited: false, metadataEdited: false, ); MbVorschlag _vorschlag({ String titel = 'Nachtpuls (korrigiert)', String kuenstler = 'Rotklang feat. Blau', String album = 'Schwarz Deluxe', }) => MbVorschlag( titel: titel, kuenstler: kuenstler, album: album, releaseMbid: 'rel-1', score: 100, ); void main() { test('übernimmt Titel, Künstler und Album des Vorschlags', () async { final db = MeloDb(NativeDatabase.memory()); addTearDown(db.close); await db.upsertSongs([ SongsCompanion.insert( id: 'song-1', path: '/musik/a.mp3', title: 'Nachtpuls', dateAddedMs: 7, updatedAtMs: 7, ), ]); await db.upsertSongs([metadatenUebernahme(_song(), _vorschlag())]); final danach = (await db.allSongs()).single; expect(danach.title, 'Nachtpuls (korrigiert)'); expect(danach.artist, 'Rotklang feat. Blau'); expect(danach.album, 'Schwarz Deluxe'); }); test('markiert den Song als von Hand bearbeitet — sonst holt der nächste ' 'Scan die alten Tags zurück', () { expect( metadatenUebernahme(_song(), _vorschlag()).metadataEdited.value, isTrue, ); }); test('leere Angaben lassen den bisherigen Wert stehen', () { final companion = metadatenUebernahme( _song(), _vorschlag(titel: '', kuenstler: '', album: ''), ); expect(companion.title.value, 'Nachtpuls'); expect(companion.artist.value, 'Rotklang'); expect(companion.album.value, 'Schwarz'); }); test('das Hinzufügedatum bleibt erhalten', () { expect(metadatenUebernahme(_song(), _vorschlag()).dateAddedMs.value, 7); }); }