import 'dart:convert'; import 'package:flutter_test/flutter_test.dart'; import 'package:melo/services/navidrome_service.dart'; /// Der Kopf der Album-Detailansicht nennt den Künstler. Der stand bisher in /// der Antwort des Servers, wurde aber nicht ausgelesen. void main() { Map antwort(List> alben) => NavidromeService.parseSubsonic(jsonEncode({ 'subsonic-response': { 'status': 'ok', 'albumList2': {'album': alben}, } })); test('liest den Album-Künstler mit', () { final alben = NavidromeService.parseAlben(antwort([ {'id': '1', 'name': 'Trailerpark', 'artist': 'Neoni', 'songCount': 12}, ])); expect(alben.single.kuenstler, 'Neoni'); expect(alben.single.name, 'Trailerpark'); expect(alben.single.songCount, 12); }); test('ein Album ohne Künstler-Feld bleibt lesbar', () { final alben = NavidromeService.parseAlben(antwort([ {'id': '1', 'name': 'Ohne'}, ])); expect(alben.single.kuenstler, isNull); expect(alben.single.name, 'Ohne'); }); group('parseSubsonic bei Fehlern', () { test('getSongs und getArtistSongs duerfen nicht "leer" melden', () { // Beide verschluckten Fehler und lieferten []. Damit sah "Server nicht // erreichbar" genauso aus wie "Album hat keine Titel", und der // Wiederholen-Knopf erschien nie. expect( () => NavidromeService.parseSubsonic(jsonEncode({ 'subsonic-response': { 'status': 'failed', 'error': {'message': 'Wrong username or password'}, } })), throwsA(isA()), ); }); }); }