import 'package:flutter_test/flutter_test.dart'; import 'package:melo/services/navidrome_service.dart'; import 'package:melo/services/server_neuheiten.dart'; import 'package:shared_preferences/shared_preferences.dart'; SubsonicAlbum _album(String id) => SubsonicAlbum(id: id, name: 'Album $id'); void main() { setUp(() => SharedPreferences.setMockInitialValues({})); test('Der erste Abruf meldet nichts Neues — sonst wäre alles neu', () async { final n = ServerNeuheiten( holeAlben: () async => [_album('1'), _album('2')]); await n.pruefe(); expect(n.neue, isEmpty); }); test('Ein danach hinzugekommenes Album wird gemeldet', () async { var alben = [_album('1'), _album('2')]; final n = ServerNeuheiten(holeAlben: () async => alben); await n.pruefe(); alben = [_album('3'), _album('1'), _album('2')]; await n.pruefe(); expect(n.neue.map((a) => a.id), ['3']); }); test('Ohne Änderung bleibt die Liste leer', () async { final n = ServerNeuheiten( holeAlben: () async => [_album('1'), _album('2')]); await n.pruefe(); await n.pruefe(); expect(n.neue, isEmpty); }); test('Als gesehen markieren räumt die Liste weg und wiederholt sich nicht', () async { var alben = [_album('1')]; final n = ServerNeuheiten(holeAlben: () async => alben); await n.pruefe(); alben = [_album('1'), _album('2')]; await n.pruefe(); expect(n.neue, isNotEmpty); await n.alsGesehenMarkieren(); expect(n.neue, isEmpty); await n.pruefe(); expect(n.neue, isEmpty); }); test('Ein Serverfehler bleibt folgenlos', () async { final n = ServerNeuheiten( holeAlben: () async => throw Exception('Server weg')); await n.pruefe(); expect(n.neue, isEmpty); }); }