Flutter-Tests: ApiClient, Offline-Queue, Login-/Objektliste-Widgets
ApiClient nimmt jetzt einen injizierbaren http.Client entgegen (Testbarkeit, kein Verhaltensunterschied im Betrieb). Tests mocken ihn mit mocktail statt echter Netzwerkaufrufe. offline_queue_test.dart nutzt sqflite_common_ffi (reines Dart) für die Queue-Logik ohne Gerät/Emulator: Erfolg entfernt Eintrag, Netzwerkfehler bleibt "wartet", 4xx setzt "fehler" ohne Auto-Retry. Dazu Widget-Tests für Login-Flow und Objektliste-Suchfilter. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
@@ -17,9 +17,10 @@ class ApiException implements Exception {
|
||||
}
|
||||
|
||||
class ApiClient {
|
||||
ApiClient({required this.baseUrl});
|
||||
ApiClient({required this.baseUrl, http.Client? httpClient}) : _http = httpClient ?? http.Client();
|
||||
|
||||
final String baseUrl;
|
||||
final http.Client _http;
|
||||
String? _token;
|
||||
|
||||
Future<void> ladeToken() async {
|
||||
@@ -40,7 +41,7 @@ class ApiClient {
|
||||
bool get istEingeloggt => _token != null;
|
||||
|
||||
Future<String> login(String username, String password) async {
|
||||
final response = await http.post(
|
||||
final response = await _http.post(
|
||||
Uri.parse('$baseUrl/auth/login'),
|
||||
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
|
||||
body: {'username': username, 'password': password},
|
||||
@@ -69,19 +70,19 @@ class ApiClient {
|
||||
late http.Response response;
|
||||
switch (method) {
|
||||
case 'POST':
|
||||
response = await http.post(uri, headers: headers, body: encodedBody);
|
||||
response = await _http.post(uri, headers: headers, body: encodedBody);
|
||||
break;
|
||||
case 'PUT':
|
||||
response = await http.put(uri, headers: headers, body: encodedBody);
|
||||
response = await _http.put(uri, headers: headers, body: encodedBody);
|
||||
break;
|
||||
case 'PATCH':
|
||||
response = await http.patch(uri, headers: headers, body: encodedBody);
|
||||
response = await _http.patch(uri, headers: headers, body: encodedBody);
|
||||
break;
|
||||
case 'DELETE':
|
||||
response = await http.delete(uri, headers: headers);
|
||||
response = await _http.delete(uri, headers: headers);
|
||||
break;
|
||||
default:
|
||||
response = await http.get(uri, headers: headers);
|
||||
response = await _http.get(uri, headers: headers);
|
||||
}
|
||||
|
||||
if (response.statusCode >= 400) {
|
||||
|
||||
Reference in New Issue
Block a user