import 'package:flutter_test/flutter_test.dart'; import 'package:melo/library/auto_scan.dart'; void main() { test('Mehr Dateien auf dem Gerät als in der Bibliothek löst einen Scan aus', () async { var gescannt = 0; final auto = AutoScan( geraeteAnzahl: () async => 12, bekannteAnzahl: () async => 10, scanne: () async => gescannt++, ); expect(await auto.pruefe(), isTrue); expect(gescannt, 1); }); test('Gleich viele Dateien lassen die Bibliothek in Ruhe', () async { var gescannt = 0; final auto = AutoScan( geraeteAnzahl: () async => 10, bekannteAnzahl: () async => 10, scanne: () async => gescannt++, ); expect(await auto.pruefe(), isFalse); expect(gescannt, 0); }); test('Auch gelöschte Dateien (weniger auf dem Gerät) lösen einen Scan aus', () async { var gescannt = 0; final auto = AutoScan( geraeteAnzahl: () async => 8, bekannteAnzahl: () async => 10, scanne: () async => gescannt++, ); expect(await auto.pruefe(), isTrue); expect(gescannt, 1); }); test('Zwei Prüfungen kurz hintereinander zählen nur einmal', () async { var gezaehlt = 0; var jetzt = DateTime(2026, 8, 20, 12, 0); final auto = AutoScan( geraeteAnzahl: () async { gezaehlt++; return 12; }, bekannteAnzahl: () async => 10, scanne: () async {}, mindestAbstand: const Duration(minutes: 5), jetzt: () => jetzt, ); await auto.pruefe(); jetzt = jetzt.add(const Duration(minutes: 1)); expect(await auto.pruefe(), isFalse); expect(gezaehlt, 1); }); test('Nach Ablauf des Mindestabstands wird wieder geprüft', () async { var gezaehlt = 0; var jetzt = DateTime(2026, 8, 20, 12, 0); final auto = AutoScan( geraeteAnzahl: () async { gezaehlt++; return 12; }, bekannteAnzahl: () async => 10, scanne: () async {}, mindestAbstand: const Duration(minutes: 5), jetzt: () => jetzt, ); await auto.pruefe(); jetzt = jetzt.add(const Duration(minutes: 6)); expect(await auto.pruefe(), isTrue); expect(gezaehlt, 2); }); test('Ein Fehler beim Zählen bleibt folgenlos', () async { var gescannt = 0; final auto = AutoScan( geraeteAnzahl: () async => throw Exception('MediaStore streikt'), bekannteAnzahl: () async => 10, scanne: () async => gescannt++, ); expect(await auto.pruefe(), isFalse); expect(gescannt, 0); }); }