Files
Melo/test/settings/settings_screen_test.dart
T
dustinandClaude Opus 5 2667613a2e Neue Melo-UI Phase 1: 4 Tabs (Meine Musik/Suche/Favoriten/Download) + Sortierung
- Meine Musik als Startbildschirm ohne Topbar: Kopfzeile (Einstellungen,
  Suche, Musikerkennung), Schnellzugriffe, Shuffle + Sortieren, Liederliste
- Sortierung nach Zuletzt hinzugefuegt / Name (A-Z-#) / Wie oft abgespielt,
  auf- und absteigend, pro Liste gespeichert (SortStore)
- Favoriten als eigener Tab mit gleicher Shuffle-/Sortier-Leiste
- Download-Tab uebernimmt den Navidrome-Server-Browser
- DB-Schema 3: playCount, gezaehlt beim Titelstart
- Theme auf #0B0B10 / #c0392b
- Scan-Aktionen aus der entfallenen Topbar jetzt in den Einstellungen

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011snPXPafPC5i87o68H14W7
2026-08-20 18:00:53 +02:00

79 lines
2.5 KiB
Dart

import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:provider/provider.dart';
import 'package:melo/library/database.dart';
import 'package:melo/library/library_service.dart';
import 'package:melo/services/offline_mode.dart';
import 'package:melo/settings/settings_screen.dart';
Widget _wrap(MeloDb db, Widget child) {
return MultiProvider(
providers: [
Provider<MeloDb>.value(value: db),
ChangeNotifierProvider<OfflineMode>.value(value: OfflineMode()),
ChangeNotifierProvider<LibraryService>.value(value: LibraryService(db)),
],
child: MaterialApp(home: child),
);
}
void main() {
testWidgets('zeigt 0 Songs ohne Bibliothek', (tester) async {
final db = MeloDb(NativeDatabase.memory());
await tester.pumpWidget(_wrap(db, const SettingsScreen()));
await tester.pumpAndSettle();
expect(find.text('0 Songs in der Bibliothek'), findsOneWidget);
await db.close();
});
testWidgets('zeigt korrekte Song-Anzahl und Gesamtspieldauer', (tester) async {
final db = MeloDb(NativeDatabase.memory());
await db.into(db.songs).insert(SongsCompanion.insert(
id: 'song-1',
path: '/a.mp3',
title: 'Song A',
dateAddedMs: 0,
updatedAtMs: 0,
durationMs: const Value(200000),
));
await db.into(db.songs).insert(SongsCompanion.insert(
id: 'song-2',
path: '/b.mp3',
title: 'Song B',
dateAddedMs: 0,
updatedAtMs: 0,
durationMs: const Value(185000),
));
await tester.pumpWidget(_wrap(db, const SettingsScreen()));
await tester.pumpAndSettle();
expect(find.text('2 Songs in der Bibliothek'), findsOneWidget);
expect(find.text('6m Gesamtspieldauer'), findsOneWidget);
await db.close();
});
testWidgets('zeigt Favoriten- und Playlisten-Sync', (tester) async {
final db = MeloDb(NativeDatabase.memory());
await tester.pumpWidget(_wrap(db, const SettingsScreen()));
await tester.pumpAndSettle();
// Die Sync-Einträge liegen weiter unten in der Liste und müssen erst
// in den sichtbaren Bereich gescrollt werden.
await tester.scrollUntilVisible(find.text('🌟 Favoriten-Sync'), 200);
await tester.pumpAndSettle();
expect(find.text('🌟 Favoriten-Sync'), findsOneWidget);
expect(find.text('📋 Playlisten-Sync'), findsOneWidget);
await db.close();
});
}