import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:melo/shared/cover.dart'; /// Server-Titel trugen nie ein Coverbild: [CoverImage] kannte nur `file://` /// und zeigte für alles andere den Noten-Platzhalter. void main() { Future pumpe(WidgetTester tester, Uri? artUri) => tester.pumpWidget( MaterialApp( home: Scaffold( body: Center(child: CoverImage(artUri: artUri, size: 48)), ), ), ); testWidgets('ohne Adresse bleibt der Noten-Platzhalter', (tester) async { await pumpe(tester, null); expect(find.byIcon(Icons.music_note), findsOneWidget); expect(find.byType(Image), findsNothing); }); testWidgets('eine Datei-Adresse wird als Bild geladen', (tester) async { await pumpe(tester, Uri.file('/tmp/gibtesnicht.jpg')); expect(find.byType(Image), findsOneWidget); }); testWidgets('eine Server-Adresse geht über den Cover-Ordner', (tester) async { // Server-Cover werden nicht direkt geladen, sondern erst auf die Platte // gelegt (siehe CoverCache) — sonst wären sie nach jedem Neustart weg. await pumpe( tester, Uri.parse('https://musik.example/getCoverArt.view?id=1')); expect(find.byType(FutureBuilder), findsOneWidget); }); testWidgets('solange das Cover unterwegs ist, steht der Platzhalter', (tester) async { // Ohne Netz kommt nichts an. Die Zeile muss trotzdem stehen, statt // leer zu bleiben oder zu springen. await pumpe(tester, Uri.parse('http://musik.example/getCoverArt.view?id=1')); expect(find.byIcon(Icons.music_note), findsOneWidget); }); testWidgets('ein unbekanntes Schema fällt auf den Platzhalter zurück', (tester) async { await pumpe(tester, Uri.parse('content://media/external/audio/42')); expect(find.byIcon(Icons.music_note), findsOneWidget); expect(find.byType(Image), findsNothing); }); }