Files
Melo/test/library/such_verlauf_test.dart
T
Hermes (Server) 07acf77ba4 UX-Simulation: Mehrfachauswahl überall, Baka-Login, Bestätigungen, Suche
7 Agenten sind die App als normaler Nutzer durchgegangen (Erststart,
Bibliothek, Download, Suche, Favoriten, Player, Einstellungen) und haben
39 Reibungspunkte gefunden. Erster Block:

- Mehrfachauswahl lief nur im Lieder-/Favoriten-Reiter, nicht in
  Kategorie-/Künstler-/Album-Ansichten — jetzt überall, per geteilter
  auswahl_leiste.dart
- Zwei unterschiedlich ausgestattete Favoriten-Listen (Tab vs. Playlisten)
  vereinheitlicht
- Baka-Login zeigt Ladezustand + Fehler im Dialog statt bis zu 15s stumm
  zu bleiben (wie der Navidrome-Login)
- Cache leeren, Navidrome-Abmelden, Download einzeln entfernen fragen jetzt
  nach
- Download-Fehlermeldung bei toter Serververbindung nennt den echten Grund
  statt "War schon heruntergeladen"
- YouTube-Fehlermeldungen sind jetzt rot statt neutralfarben
- Suche schließt die Tastatur nach Auswahl, nennt den Suchbegriff bei
  "Nichts gefunden", einzelne Verlaufseinträge sind entfernbar
- Icon-/Text-Korrekturen (Mikrofon-Icon fälschlich bei Speicherzugriff,
  "Online"-Tab existiert nicht, ReplayGain-Jargon)

537 Tests grün (vorher 533), flutter analyze ohne Befund.
2026-08-25 09:42:41 +02:00

71 lines
2.0 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:melo/library/such_verlauf.dart';
/// Die Reihenfolge-Regeln des Verlaufs — ohne SharedPreferences prüfbar.
void main() {
group('verlaufMit', () {
test('legt den neuen Begriff nach vorn', () {
expect(verlaufMit(['neoni', 'rock'], 'trap'), ['trap', 'neoni', 'rock']);
});
test('ein erneut gesuchter Begriff wandert nach vorn statt sich zu doppeln',
() {
expect(verlaufMit(['neoni', 'rock'], 'rock'), ['rock', 'neoni']);
});
test('Groß- und Kleinschreibung gilt als derselbe Begriff', () {
expect(verlaufMit(['Rock'], 'rock'), ['rock']);
});
test('Leerraum am Rand zählt nicht mit', () {
expect(verlaufMit(['rock'], ' rock '), ['rock']);
});
test('deckelt bei acht Einträgen', () {
final voll = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'];
final neu = verlaufMit(voll, 'i');
expect(neu.length, 8);
expect(neu.first, 'i');
// Der älteste fällt hinten heraus.
expect(neu, isNot(contains('h')));
});
test('ein leerer Begriff ändert nichts', () {
expect(verlaufMit(['rock'], ' '), ['rock']);
});
test('lässt die Ausgangsliste unverändert', () {
final vorher = ['rock'];
verlaufMit(vorher, 'trap');
expect(vorher, ['rock']);
});
});
group('verlaufOhne', () {
test('entfernt genau den gesuchten Begriff', () {
expect(verlaufOhne(['trap', 'neoni', 'rock'], 'neoni'),
['trap', 'rock']);
});
test('Groß- und Kleinschreibung gilt als derselbe Begriff', () {
expect(verlaufOhne(['Rock', 'trap'], 'rock'), ['trap']);
});
test('ein nicht enthaltener Begriff ändert nichts', () {
expect(verlaufOhne(['rock'], 'trap'), ['rock']);
});
test('lässt die Ausgangsliste unverändert', () {
final vorher = ['rock', 'trap'];
verlaufOhne(vorher, 'rock');
expect(vorher, ['rock', 'trap']);
});
});
}