Tiefe Debug-Runde bewiesen: Server, DB-Passwort und App-Token-Logik sind korrekt (8/8-Repro gegen Live-Server) — abgelehnt wird ein falscher Passwort-Wert vom Gerät. Damit das künftig sofort sichtbar ist: - NavidromeService.letzterLoginFehler hält die Server-Meldung fest - Login-Dialog zeigt sie statt generischem "Login fehlgeschlagen" - Fehler-Log enthält die Passwort-Länge (nie das Passwort selbst) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JRj3pupcigUi683vy2Wwnz
49 lines
1.7 KiB
Dart
49 lines
1.7 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:melo/services/logger_service.dart';
|
|
import 'package:melo/services/navidrome_service.dart';
|
|
|
|
/// Tests für die Login-Fehlerdiagnose: Lehnt der Server den Login ab
|
|
/// (status:failed, z. B. „Wrong username or password"), muss die App die
|
|
/// Server-Meldung festhalten, damit der Login-Dialog sie anzeigen kann —
|
|
/// ein generisches „Login fehlgeschlagen" verschleiert die Ursache.
|
|
void main() {
|
|
late HttpServer server;
|
|
|
|
setUpAll(() async => logger.init());
|
|
|
|
Future<Uri> starteServer(String body) async {
|
|
server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
|
|
server.listen((req) {
|
|
req.response
|
|
..statusCode = 200
|
|
..headers.contentType = ContentType.json
|
|
..write(body);
|
|
req.response.close();
|
|
});
|
|
return Uri.parse('http://127.0.0.1:${server.port}');
|
|
}
|
|
|
|
tearDown(() async => server.close(force: true));
|
|
|
|
test('ping speichert Server-Meldung bei abgelehntem Login', () async {
|
|
final url = await starteServer(
|
|
'{"subsonic-response":{"status":"failed","version":"1.16.1",'
|
|
'"error":{"code":40,"message":"Wrong username or password"}}}');
|
|
final svc = NavidromeService();
|
|
svc.setCredentials(url.toString(), 'Baka', 'falsch');
|
|
expect(await svc.ping(), isFalse);
|
|
expect(svc.letzterLoginFehler, 'Wrong username or password');
|
|
});
|
|
|
|
test('ping löscht alte Fehlermeldung bei Erfolg', () async {
|
|
final url = await starteServer(
|
|
'{"subsonic-response":{"status":"ok","version":"1.16.1"}}');
|
|
final svc = NavidromeService();
|
|
svc.setCredentials(url.toString(), 'Baka', 'richtig');
|
|
expect(await svc.ping(), isTrue);
|
|
expect(svc.letzterLoginFehler, isNull);
|
|
});
|
|
}
|