From e4b2dd0462e6a05afb6dc7fff15c3a7aa5550de0 Mon Sep 17 00:00:00 2001
From: verboomp
Date: Tue, 27 Jan 2026 14:09:12 +0100
Subject: [PATCH] cleanup and added unit tests
---
.../core/query/QueryService.java | 32 --
.../core/service/CustomerPictureService.java | 2 +-
.../core/service/JwtTokenService.java | 2 +-
.../core/service/LoginService.java | 14 +-
.../fotodocumentation/rest/LoginResource.java | 5 +-
.../rest/PictureResource.java | 2 -
.../jackson/ValidatedMessageBodyReader.java | 3 +-
.../rest/CustomerResourceTest.java | 21 ++
.../rest/LoginResourceTest.java | 2 -
.../CustomerResourceTest-doGetCustomer.json | 23 ++
.../lib/controller/base_controller.dart | 91 +-----
.../lib/controller/picture_controller.dart | 2 +-
.../lib/dto/base_dto.dart | 5 -
.../lib/dto/customer_dto.dart | 25 +-
.../lib/dto/jwt_token_pair_dto.dart | 26 --
.../lib/dto/picture_dto.dart | 25 ++
.../lib/main.dart | 2 +-
.../lib/pages/customer/customer_row_item.dart | 40 ---
.../lib/pages/customer/customer_widget.dart | 3 +
.../pages/customer/picture_delete_dialog.dart | 2 +
.../customer/picture_fullscreen_dialog.dart | 2 +-
.../lib/pages/customer/picture_widget.dart | 16 +-
.../lib/pages/landing_page_widget.dart | 23 --
.../component/general_submit_widget.dart | 32 --
.../pages/ui_utils/dialog/delete_dialog.dart | 173 -----------
.../pages/ui_utils/dialog/snackbar_utils.dart | 85 -----
.../lib/pages/ui_utils/general_style.dart | 20 +-
.../pages/ui_utils/header_button_wrapper.dart | 89 ------
.../lib/pages/ui_utils/header_utils.dart | 75 -----
.../lib/pages/ui_utils/modern_app_bar.dart | 99 ------
.../lib/utils/di_container.dart | 4 -
.../controller/customer_controller_test.dart | 100 ++++++
.../controller/login_controller_test.dart | 80 +++++
.../controller/picture_controller_test.dart | 41 +++
.../test/main_test.dart | 146 +++++++++
.../test/pages/customer_list_widget_test.dart | 48 +++
.../test/pages/customer_widget_test.dart | 106 +++++++
.../test/pages/login_widget_test.dart | 200 ++++++++++++
.../test/pages/picture_widget_test.dart | 258 +++++++++++++++
.../ui_utils/general_error_widget_test.dart | 211 +++++++++++++
.../test/testing/test_utils.dart | 16 +-
.../test/testing/test_utils.mocks.dart | 293 ++++++++++--------
42 files changed, 1467 insertions(+), 977 deletions(-)
create mode 100644 hartmann-foto-documentation-docker/src/test/resources/json/CustomerResourceTest-doGetCustomer.json
create mode 100644 hartmann-foto-documentation-frontend/lib/dto/picture_dto.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/pages/customer/customer_row_item.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/pages/landing_page_widget.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/general_submit_widget.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/dialog/delete_dialog.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/dialog/snackbar_utils.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/header_button_wrapper.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/header_utils.dart
delete mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/modern_app_bar.dart
create mode 100644 hartmann-foto-documentation-frontend/test/controller/customer_controller_test.dart
create mode 100644 hartmann-foto-documentation-frontend/test/controller/login_controller_test.dart
create mode 100644 hartmann-foto-documentation-frontend/test/controller/picture_controller_test.dart
create mode 100644 hartmann-foto-documentation-frontend/test/main_test.dart
create mode 100644 hartmann-foto-documentation-frontend/test/pages/customer_list_widget_test.dart
create mode 100644 hartmann-foto-documentation-frontend/test/pages/customer_widget_test.dart
create mode 100644 hartmann-foto-documentation-frontend/test/pages/login_widget_test.dart
create mode 100644 hartmann-foto-documentation-frontend/test/pages/picture_widget_test.dart
create mode 100644 hartmann-foto-documentation-frontend/test/pages/ui_utils/general_error_widget_test.dart
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/query/QueryService.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/query/QueryService.java
index 01a1603..22ce90f 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/query/QueryService.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/query/QueryService.java
@@ -33,14 +33,6 @@ public class QueryService {
@PersistenceContext
private EntityManager eManager;
- public int count(String namedQuery, Param... params) {
- Query query = eManager.createNamedQuery(namedQuery);
- for (Param param : params) {
- query.setParameter(param.name(), param.value());
- }
- return ((Number) query.getSingleResult()).intValue();
- }
-
public Optional callNamedQuerySingleResult(String namedQuery, Param... params) {
return singleResult(eManager.createNamedQuery(namedQuery), Arrays.asList(params));
}
@@ -66,30 +58,6 @@ public class QueryService {
return (T) query.getResultList();
}
- public Optional callQuerySingleResult(String sql, Param... objects) {
- Query query = eManager.createQuery(sql);
- for (Param param : objects) {
- query.setParameter(param.name(), param.value());
- }
- return Optional.of((T) query.getSingleResult());
- }
-
- public T callNativeQuery(String sql, Param... objects) {
- Query query = eManager.createNativeQuery(sql);
- for (Param param : objects) {
- query.setParameter(param.name(), param.value());
- }
- return (T) query.getResultList();
- }
-
- public int callNativeQueryUpdate(String sql, Param... objects) {
- Query query = eManager.createNativeQuery(sql);
- for (Param param : objects) {
- query.setParameter(param.name(), param.value());
- }
- return query.executeUpdate();
- }
-
public int callNamedQueryUpdate(String namedQuery, Param... objects) {
Query query = eManager.createNamedQuery(namedQuery);
for (Param param : objects) {
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/CustomerPictureService.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/CustomerPictureService.java
index 40b247f..0e3a7f1 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/CustomerPictureService.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/CustomerPictureService.java
@@ -52,7 +52,7 @@ public class CustomerPictureService extends AbstractService {
// query = search for name, number and date
public List getAll(String queryStr, String startsWith) {
- // FIXME: do query
+ // FIXME: do query on date
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery criteriaQuery = builder.createQuery(Customer.class);
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/JwtTokenService.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/JwtTokenService.java
index 7ebf3c8..c6d23d2 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/JwtTokenService.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/JwtTokenService.java
@@ -55,7 +55,7 @@ public class JwtTokenService extends AbstractService {
return new TokenPairValue(accessToken, refreshToken);
}
- public String refreshAccessToken(String refreshToken) throws Exception {
+ public String refreshAccessToken(String refreshToken) {
Claims claims = jwtTokenUtil.validateAndExtractClaims(refreshToken);
Long userId = Long.parseLong(claims.getSubject());
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/LoginService.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/LoginService.java
index 1090303..c5a4681 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/LoginService.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/LoginService.java
@@ -29,19 +29,11 @@ public class LoginService extends AbstractService{
// Get logged-in user from database
Optional userOpt = queryService.callNamedQuerySingleResult(User.BY_USERNAME, new Param(User.PARAM_USERNAME, username));
if (userOpt.isEmpty()) {
- // FIXME: implement me
+ // Should never happen
+ return null;
}
User user = userOpt.get();
- // Verify user is active
- if (!user.isActive()) {
- throw new IllegalArgumentException("User account is inactive");
- }
-
- TokenPairValue tokens = jwtTokenService.generateTokenPair(user, deviceInfo, ipAddress);
- // Logout from the temporary login (we're using tokens now, not session)
- return tokens;
-
+ return jwtTokenService.generateTokenPair(user, deviceInfo, ipAddress);
}
-
}
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/LoginResource.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/LoginResource.java
index ac8b009..0767b36 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/LoginResource.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/LoginResource.java
@@ -67,10 +67,7 @@ public class LoginResource {
String deviceInfo = loginUtils.extractDeviceInfo(httpServletRequest);
String ipAddress = loginUtils.extractIpAddress(httpServletRequest);
- TokenPairValue tokenPairValue = loginService.authenticateUser(username, deviceInfo, ipAddress);
-
- //FIXME: check if we can do a logout to free user from WildFly httpServletRequest.logout();
+ var tokenPairValue = loginService.authenticateUser(username, deviceInfo, ipAddress);
return Response.ok(tokenPairValue).build();
}
-
}
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/PictureResource.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/PictureResource.java
index 265e773..a562e3d 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/PictureResource.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/PictureResource.java
@@ -48,9 +48,7 @@ public class PictureResource {
protected ResponseBuilder deleteResponse(StorageState state) {
return switch(state) {
case OK -> Response.status(Status.OK);
- case DUPLICATE -> Response.status(Status.CONFLICT);
case NOT_FOUND -> Response.status(Status.NOT_FOUND);
- case FORBIDDEN -> Response.status(Status.FORBIDDEN);
default -> Response.status(Status.INTERNAL_SERVER_ERROR);
};
}
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/jackson/ValidatedMessageBodyReader.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/jackson/ValidatedMessageBodyReader.java
index 72e6849..fd2a263 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/jackson/ValidatedMessageBodyReader.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/jackson/ValidatedMessageBodyReader.java
@@ -37,7 +37,8 @@ import com.networknt.schema.ValidationMessage;
*/
@Provider
@Consumes(value = {
- MediaType.APPLICATION_JSON, "application/json; charset=utf-8"
+ MediaType.APPLICATION_JSON, "application/json",
+ MediaType.APPLICATION_JSON, "application/json; charset=utf-8",
})
public class ValidatedMessageBodyReader implements MessageBodyReader {
private static final Log LOG = LogFactory.getLog(ValidatedMessageBodyReader.class);
diff --git a/hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerResourceTest.java b/hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerResourceTest.java
index 9d97bf3..0223531 100644
--- a/hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerResourceTest.java
+++ b/hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerResourceTest.java
@@ -54,4 +54,25 @@ public class CustomerResourceTest extends AbstractRestTest {
String expected = fileToString(BASE_DOWNLOAD + "doGetAll.json");
jsonAssert(expected, text);
}
+
+ @Test
+ @Order(1)
+ public void doGetCustomer() throws IOException {
+ LOG.info("doGetCustomer");
+
+ String authorization = getAuthorization();
+ LOG.info("authorization: " + authorization);
+ String path = deploymentURL + PATH +"/1";
+ Request request = Request.Get(path).addHeader("Accept", "application/json; charset=utf-8")
+ .addHeader("Authorization", authorization);
+
+ HttpResponse httpResponse = executeRequest(request);
+ int code = httpResponse.getStatusLine().getStatusCode();
+ assertEquals(200, code);
+
+
+ String text = getResponseText(httpResponse, "doGetCustomer");
+ String expected = fileToString(BASE_DOWNLOAD + "doGetCustomer.json");
+ jsonAssert(expected, text);
+ }
}
diff --git a/hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/LoginResourceTest.java b/hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/LoginResourceTest.java
index fe0ab51..adb581b 100644
--- a/hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/LoginResourceTest.java
+++ b/hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/LoginResourceTest.java
@@ -27,13 +27,11 @@ public class LoginResourceTest extends AbstractRestTest {
@Order(2)
public void doTestLogin() {
LOG.info("doTestLogin");
-
String token = getBasicHeader();
assertNotNull(token);
}
public static void main(String[] args) {
-
var test = new LoginResourceTest();
test.deploymentURL = "http://localhost:8080/";
String token = test.getAuthorization("hartmann", "nvlev4YnTi");
diff --git a/hartmann-foto-documentation-docker/src/test/resources/json/CustomerResourceTest-doGetCustomer.json b/hartmann-foto-documentation-docker/src/test/resources/json/CustomerResourceTest-doGetCustomer.json
new file mode 100644
index 0000000..c1f124c
--- /dev/null
+++ b/hartmann-foto-documentation-docker/src/test/resources/json/CustomerResourceTest-doGetCustomer.json
@@ -0,0 +1,23 @@
+{
+ "id": 1,
+ "name": "Müller Apotheke",
+ "customerNumber": "1234",
+ "pictures": [
+ {
+ "id": 1,
+ "comment": "good looking picture 1",
+ "category": null,
+ "image": "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",
+ "pictureDate": 1729764570000,
+ "username": "verboomp"
+ },
+ {
+ "id": 2,
+ "comment": "good looking picture 2",
+ "category": null,
+ "image": "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",
+ "pictureDate": 1729764570000,
+ "username": "verboomp"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/hartmann-foto-documentation-frontend/lib/controller/base_controller.dart b/hartmann-foto-documentation-frontend/lib/controller/base_controller.dart
index 9202c1a..a165688 100644
--- a/hartmann-foto-documentation-frontend/lib/controller/base_controller.dart
+++ b/hartmann-foto-documentation-frontend/lib/controller/base_controller.dart
@@ -1,14 +1,13 @@
-import 'dart:convert' show jsonDecode, jsonEncode;
+import 'dart:convert' show jsonDecode;
-import 'package:fotodocumentation/dto/base_dto.dart';
-import 'package:fotodocumentation/utils/di_container.dart';
-import 'package:fotodocumentation/utils/http_client_utils.dart';
-import 'package:fotodocumentation/utils/jwt_token_storage.dart';
-import 'package:fotodocumentation/utils/url_utils.dart';
import 'package:http/http.dart' as http;
import 'package:http/http.dart' show Response;
import 'package:fotodocumentation/main.dart' show logger;
+import 'package:fotodocumentation/utils/di_container.dart';
+import 'package:fotodocumentation/utils/http_client_utils.dart';
+import 'package:fotodocumentation/utils/jwt_token_storage.dart';
+import 'package:fotodocumentation/utils/url_utils.dart';
abstract class BaseController {
UrlUtils get uriUtils => DiContainer.get();
@@ -75,68 +74,6 @@ abstract class BaseController {
var response = await client.delete(uri, headers: {cred.name: cred.value});
return response.statusCode == 200;
}
-
- Future runPutWithAuth(String uriStr) async {
- http.Client client = httpClientUtils.client;
- Header cred = await getAuthHeader();
- Uri uri = Uri.parse(uriStr);
- var response = await client.put(uri, headers: {cred.name: cred.value});
- return response.statusCode == 200;
- }
-
- Future> runSaveNew(String uriStr, T dtoObj, Function(http.Response response, T dto) processReply) async {
- http.Client client = httpClientUtils.client;
- try {
- Header cred = await getAuthHeader();
- String body = jsonEncode(dtoObj.toMap());
-
- Uri uri = Uri.parse(uriStr);
- var response = await client.post(uri, headers: {cred.name: cred.value, "Accept": "application/json", "Content-Type": "application/json"}, body: body);
- return processReply(response, dtoObj);
- } catch (e) {
- logger.e("exception $e");
- }
- return ServerReply(ServerState.error, dtoObj);
- }
-
- Future> runSaveUpdate(String uriStr, T dtoObj, Function(http.Response response, T dto) processReply) async {
- http.Client client = httpClientUtils.client;
- try {
- Header cred = await getAuthHeader();
- String body = jsonEncode(dtoObj.toMap());
-
- Uri uri = Uri.parse(uriStr);
- var response = await client.put(uri, headers: {cred.name: cred.value, "Accept": "application/json", "Content-Type": "application/json"}, body: body);
-
- return processReply(response, dtoObj);
- } catch (e) {
- logger.e("exception $e");
- }
- return ServerReply(ServerState.error, dtoObj);
- }
-
- ServerReply processServerResponse(Response response, T dto, T Function(Map json) fromJson) {
- if (response.statusCode == 200) {
- String text = response.body;
- var json = jsonDecode(text);
- var dto = fromJson(json);
- return ServerReply(ServerState.ok, dto);
- } else if (response.statusCode == 400 || response.statusCode == 409) {
- String text = response.body;
- try {
- var json = jsonDecode(text);
- var error = ErrorDto.fromJson(json);
-
- return ServerReply(ServerState.duplicate, dto, error: error);
- } catch (e) {
- return ServerReply(ServerState.error, dto, error: ErrorDto(response.statusCode, text));
- }
- } else if (response.statusCode == 403) {
- var error = ErrorDto(403, "Not allowed.");
- return ServerReply(ServerState.error, dto, error: error);
- }
- return ServerReply(ServerState.error, dto, error: ErrorDto(response.statusCode, "Internal server error"));
- }
}
class Header {
@@ -149,26 +86,8 @@ class Header {
String toString() => '$runtimeType: $name, $value';
}
-class ServerReply {
- ServerState state;
- T entity;
- ErrorDto? error;
-
- ServerReply(this.state, this.entity, {this.error});
-
- @override
- String toString() => '$runtimeType: $state, $entity, $error';
-}
-
class ServerError {
int statusCode;
ServerError(this.statusCode);
}
-
-enum ServerState {
- ok,
- duplicate,
- error,
- ;
-}
diff --git a/hartmann-foto-documentation-frontend/lib/controller/picture_controller.dart b/hartmann-foto-documentation-frontend/lib/controller/picture_controller.dart
index 4f08a95..4d56c5a 100644
--- a/hartmann-foto-documentation-frontend/lib/controller/picture_controller.dart
+++ b/hartmann-foto-documentation-frontend/lib/controller/picture_controller.dart
@@ -1,5 +1,5 @@
import 'package:fotodocumentation/controller/base_controller.dart';
-import 'package:fotodocumentation/dto/customer_dto.dart';
+import 'package:fotodocumentation/dto/picture_dto.dart';
abstract interface class PictureController {
Future delete(PictureDto dto);
diff --git a/hartmann-foto-documentation-frontend/lib/dto/base_dto.dart b/hartmann-foto-documentation-frontend/lib/dto/base_dto.dart
index 2a47fdb..30b1610 100644
--- a/hartmann-foto-documentation-frontend/lib/dto/base_dto.dart
+++ b/hartmann-foto-documentation-frontend/lib/dto/base_dto.dart
@@ -8,8 +8,3 @@ final class ErrorDto {
: error = json['error'] as int,
message = json['message'];
}
-
-abstract interface class DtoMapAble {
- Map toMap();
-}
-
diff --git a/hartmann-foto-documentation-frontend/lib/dto/customer_dto.dart b/hartmann-foto-documentation-frontend/lib/dto/customer_dto.dart
index 0178b31..163621a 100644
--- a/hartmann-foto-documentation-frontend/lib/dto/customer_dto.dart
+++ b/hartmann-foto-documentation-frontend/lib/dto/customer_dto.dart
@@ -1,3 +1,4 @@
+import 'package:fotodocumentation/dto/picture_dto.dart';
import 'package:fotodocumentation/utils/date_time_utils.dart';
class CustomerListDto {
@@ -38,28 +39,4 @@ class CustomerDto {
}
}
-class PictureDto {
- final int id;
- final String? comment;
- final String? category;
- final String image;
- final DateTime pictureDate;
- final String? username;
- final CustomerListDto customerListDto;
- PictureDto(
- {required this.id, required this.comment, required this.category, required this.image, required this.pictureDate, required this.username, required this.customerListDto});
-
- /// Create from JSON response
- factory PictureDto.fromJson(Map json) {
- return PictureDto(
- id: json['id'] as int,
- comment: json['comment'] as String?,
- category: json['category'] as String?,
- image: json['image'] as String,
- pictureDate: DateTimeUtils.toDateTime(json['pictureDate']) ?? DateTime.now(),
- username: json['username'] as String?,
- customerListDto: CustomerListDto.fromJson(json['customer']),
- );
- }
-}
diff --git a/hartmann-foto-documentation-frontend/lib/dto/jwt_token_pair_dto.dart b/hartmann-foto-documentation-frontend/lib/dto/jwt_token_pair_dto.dart
index 80caba9..dce7cd0 100644
--- a/hartmann-foto-documentation-frontend/lib/dto/jwt_token_pair_dto.dart
+++ b/hartmann-foto-documentation-frontend/lib/dto/jwt_token_pair_dto.dart
@@ -1,21 +1,3 @@
-/// DTO representing a failes login attempt request for 2fa token.
-class TokenRequiredDto {
- final bool? tokenRequired;
- final bool? tokenInValid;
-
- TokenRequiredDto({
- required this.tokenRequired,
- required this.tokenInValid,
- });
-
- /// Create from JSON response
- factory TokenRequiredDto.fromJson(Map json) {
- return TokenRequiredDto(
- tokenRequired: json['tokenRequired'] as bool,
- tokenInValid: json['tokenInValid'] as bool,
- );
- }
-}
/// DTO representing a pair of JWT tokens from the backend.
class JwtTokenPairDto {
@@ -35,14 +17,6 @@ class JwtTokenPairDto {
);
}
- /// Convert to JSON (for serialization if needed)
- Map toJson() {
- return {
- 'accessToken': accessToken,
- 'refreshToken': refreshToken,
- };
- }
-
@override
String toString() {
return 'JwtTokenPairDto{accessToken: [REDACTED], refreshToken: [REDACTED]}';
diff --git a/hartmann-foto-documentation-frontend/lib/dto/picture_dto.dart b/hartmann-foto-documentation-frontend/lib/dto/picture_dto.dart
new file mode 100644
index 0000000..89de52c
--- /dev/null
+++ b/hartmann-foto-documentation-frontend/lib/dto/picture_dto.dart
@@ -0,0 +1,25 @@
+import 'package:fotodocumentation/utils/date_time_utils.dart';
+
+class PictureDto {
+ final int id;
+ final String? comment;
+ final String? category;
+ final String image;
+ final DateTime pictureDate;
+ final String? username;
+
+ PictureDto(
+ {required this.id, required this.comment, required this.category, required this.image, required this.pictureDate, required this.username});
+
+ /// Create from JSON response
+ factory PictureDto.fromJson(Map json) {
+ return PictureDto(
+ id: json['id'] as int,
+ comment: json['comment'] as String?,
+ category: json['category'] as String?,
+ image: json['image'] as String,
+ pictureDate: DateTimeUtils.toDateTime(json['pictureDate']) ?? DateTime.now(),
+ username: json['username'] as String?
+ );
+ }
+}
\ No newline at end of file
diff --git a/hartmann-foto-documentation-frontend/lib/main.dart b/hartmann-foto-documentation-frontend/lib/main.dart
index cfea410..53ec17c 100644
--- a/hartmann-foto-documentation-frontend/lib/main.dart
+++ b/hartmann-foto-documentation-frontend/lib/main.dart
@@ -22,7 +22,7 @@ void main() async {
await initializeDateFormatting('de_DE', null);
LoginController loginController = DiContainer.get();
- //await loginController.isLoggedIn();
+ await loginController.isUsingJwtAuth();
runApp(FotoDocumentationApp(theme: theme));
}
diff --git a/hartmann-foto-documentation-frontend/lib/pages/customer/customer_row_item.dart b/hartmann-foto-documentation-frontend/lib/pages/customer/customer_row_item.dart
deleted file mode 100644
index 8848a42..0000000
--- a/hartmann-foto-documentation-frontend/lib/pages/customer/customer_row_item.dart
+++ /dev/null
@@ -1,40 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:fotodocumentation/dto/customer_dto.dart';
-import 'package:fotodocumentation/pages/ui_utils/dialog/delete_dialog.dart';
-
-class CustomerRowItem extends StatelessWidget {
- final CustomerListDto dto;
- final Future Function(CustomerListDto) doDelete;
- final Future Function(CustomerListDto)? doSelect;
-
- const CustomerRowItem({super.key, required this.dto, required this.doDelete, this.doSelect});
-
- @override
- Widget build(BuildContext context) {
- return ListTile(
- leading: CircleAvatar(
- backgroundColor: Colors.grey[300],
- child: Text(
- dto.name.isNotEmpty ? dto.name[0].toUpperCase() : '?',
- style: TextStyle(
- color: Colors.grey[700],
- fontWeight: FontWeight.bold,
- ),
- ),
- ),
- title: Text(dto.name),
- subtitle: Text('CustomerNumber: ${dto.customerNumber}'),
-
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(8),
- ),
- onTap: () async => await _doSelect(context),
- );
- }
-
- Future _doSelect(BuildContext context) async {
- if (doSelect != null) {
- await doSelect!(dto);
- }
- }
-}
diff --git a/hartmann-foto-documentation-frontend/lib/pages/customer/customer_widget.dart b/hartmann-foto-documentation-frontend/lib/pages/customer/customer_widget.dart
index b9b3749..e4e8b35 100644
--- a/hartmann-foto-documentation-frontend/lib/pages/customer/customer_widget.dart
+++ b/hartmann-foto-documentation-frontend/lib/pages/customer/customer_widget.dart
@@ -2,6 +2,7 @@ import 'dart:convert' show base64Decode;
import 'package:flutter/material.dart';
import 'package:fotodocumentation/controller/picture_controller.dart';
+import 'package:fotodocumentation/dto/picture_dto.dart';
import 'package:fotodocumentation/pages/customer/picture_delete_dialog.dart';
import 'package:go_router/go_router.dart';
@@ -194,6 +195,7 @@ class _CustomerWidgetState extends State {
final dateStr = _dateFormat.format(pictureDto.pictureDate);
return InkWell(
+ key: Key("table_row_${customerDto.id}"),
onTap: () => _actionSelect(context, customerDto, pictureDto),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
@@ -231,6 +233,7 @@ class _CustomerWidgetState extends State {
SizedBox(
width: 48,
child: IconButton(
+ key: Key("table_row_delete_${customerDto.id}"),
icon: Icon(
Icons.delete_outline,
color: _generalStyle.errorColor,
diff --git a/hartmann-foto-documentation-frontend/lib/pages/customer/picture_delete_dialog.dart b/hartmann-foto-documentation-frontend/lib/pages/customer/picture_delete_dialog.dart
index e501113..83359d5 100644
--- a/hartmann-foto-documentation-frontend/lib/pages/customer/picture_delete_dialog.dart
+++ b/hartmann-foto-documentation-frontend/lib/pages/customer/picture_delete_dialog.dart
@@ -28,6 +28,7 @@ class PictureDeleteDialog extends StatelessWidget {
),
actions: [
TextButton(
+ key: Key("picture_delete_no"),
onPressed: () => Navigator.of(context).pop(false),
child: Text(
AppLocalizations.of(context)!.deleteDialogButtonCancel,
@@ -38,6 +39,7 @@ class PictureDeleteDialog extends StatelessWidget {
),
),
TextButton(
+ key: Key("picture_delete_yes"),
onPressed: () => Navigator.of(context).pop(true),
child: Text(
AppLocalizations.of(context)!.deleteDialogButtonApprove,
diff --git a/hartmann-foto-documentation-frontend/lib/pages/customer/picture_fullscreen_dialog.dart b/hartmann-foto-documentation-frontend/lib/pages/customer/picture_fullscreen_dialog.dart
index 6b7fdf1..72a4b43 100644
--- a/hartmann-foto-documentation-frontend/lib/pages/customer/picture_fullscreen_dialog.dart
+++ b/hartmann-foto-documentation-frontend/lib/pages/customer/picture_fullscreen_dialog.dart
@@ -1,7 +1,7 @@
import 'dart:convert' show base64Decode;
import 'package:flutter/material.dart';
-import 'package:fotodocumentation/dto/customer_dto.dart';
+import 'package:fotodocumentation/dto/picture_dto.dart';
import 'package:fotodocumentation/pages/ui_utils/general_style.dart';
import 'package:fotodocumentation/utils/di_container.dart';
diff --git a/hartmann-foto-documentation-frontend/lib/pages/customer/picture_widget.dart b/hartmann-foto-documentation-frontend/lib/pages/customer/picture_widget.dart
index d30537a..94480cc 100644
--- a/hartmann-foto-documentation-frontend/lib/pages/customer/picture_widget.dart
+++ b/hartmann-foto-documentation-frontend/lib/pages/customer/picture_widget.dart
@@ -2,6 +2,7 @@ import 'dart:convert' show base64Decode;
import 'package:flutter/material.dart';
import 'package:fotodocumentation/dto/customer_dto.dart';
+import 'package:fotodocumentation/dto/picture_dto.dart';
import 'package:fotodocumentation/pages/customer/picture_fullscreen_dialog.dart';
import 'package:fotodocumentation/pages/ui_utils/general_style.dart';
import 'package:fotodocumentation/utils/di_container.dart';
@@ -179,12 +180,17 @@ class _PictureWidgetState extends State {
Widget _imageWidget(PictureDto dto) {
return GestureDetector(
+ key: const Key("image"),
+ behavior: HitTestBehavior.opaque,
onTap: () => _showFullscreenImage(dto),
child: MouseRegion(
cursor: SystemMouseCursors.click,
- child: Image.memory(
- base64Decode(dto.image),
- fit: BoxFit.contain,
+ child: ConstrainedBox(
+ constraints: const BoxConstraints(minWidth: 100, minHeight: 100),
+ child: Image.memory(
+ base64Decode(dto.image),
+ fit: BoxFit.contain,
+ ),
),
),
);
@@ -234,7 +240,7 @@ class _PictureWidgetState extends State {
Padding(
padding: const EdgeInsets.only(top: 4.0),
child: Text(
- dto.customerListDto.name,
+ widget.customerDto.name,
style: contentStyle,
),
),
@@ -248,7 +254,7 @@ class _PictureWidgetState extends State {
Padding(
padding: const EdgeInsets.only(top: 4.0),
child: Text(
- dto.customerListDto.customerNumber,
+ widget.customerDto.customerNumber,
style: contentStyle,
),
),
diff --git a/hartmann-foto-documentation-frontend/lib/pages/landing_page_widget.dart b/hartmann-foto-documentation-frontend/lib/pages/landing_page_widget.dart
deleted file mode 100644
index a636bce..0000000
--- a/hartmann-foto-documentation-frontend/lib/pages/landing_page_widget.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-import 'package:flutter/material.dart';
-
-class LandingPageWidget extends StatefulWidget {
- final Widget child;
- const LandingPageWidget({super.key, required this.child});
-
- @override
- State createState() => _LandingPageWidgetState();
-}
-
-class _LandingPageWidgetState extends State {
- @override
- void initState() {
- super.initState();
- }
-
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- body: widget.child,
- );
- }
-}
diff --git a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/general_submit_widget.dart b/hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/general_submit_widget.dart
deleted file mode 100644
index 5d3b993..0000000
--- a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/general_submit_widget.dart
+++ /dev/null
@@ -1,32 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:fotodocumentation/l10n/app_localizations.dart';
-import 'package:fotodocumentation/pages/ui_utils/general_style.dart';
-import 'package:fotodocumentation/utils/di_container.dart';
-
-typedef SubmitCallback = void Function();
-
-class GeneralSubmitWidget extends StatelessWidget {
- GeneralStyle get _generalStyle => DiContainer.get();
-
- final SubmitCallback onSelect;
- final String? title;
-
- const GeneralSubmitWidget({super.key, required this.onSelect, this.title});
-
- @override
- Widget build(BuildContext context) {
- String text = title ?? AppLocalizations.of(context)!.submitWidget;
- return Row(
- mainAxisAlignment: MainAxisAlignment.end,
- crossAxisAlignment: CrossAxisAlignment.end,
- children: [
- ElevatedButton(
- key: Key("SubmitWidgetButton"),
- style: _generalStyle.elevatedButtonStyle,
- onPressed: onSelect,
- child: Text(text),
- ),
- ],
- );
- }
-}
diff --git a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/dialog/delete_dialog.dart b/hartmann-foto-documentation-frontend/lib/pages/ui_utils/dialog/delete_dialog.dart
deleted file mode 100644
index 471df04..0000000
--- a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/dialog/delete_dialog.dart
+++ /dev/null
@@ -1,173 +0,0 @@
-import 'package:flutter/material.dart';
-
-import 'package:fotodocumentation/main.dart' show logger;
-import 'package:fotodocumentation/l10n/app_localizations.dart';
-import 'package:fotodocumentation/pages/ui_utils/dialog/snackbar_utils.dart';
-import 'package:fotodocumentation/utils/di_container.dart';
-
-class DeleteDialog extends StatelessWidget {
- static SnackbarUtils get _snackbarUtils => DiContainer.get();
-
- const DeleteDialog({super.key});
-
- static Future show(BuildContext context, Future Function() doDelete) async {
- await _openDialog(context).then((value) async {
- if (value != null && value && context.mounted) {
- logger.d("Delete popup result $value");
- var result = await doDelete();
- if (context.mounted && result.msg.isNotEmpty) {
- _snackbarUtils.showSnackbar(context, result.msg, result.warning);
- }
- }
- });
- }
-
- static Future _openDialog(BuildContext context) async {
- return showDialog(
- context: context,
- barrierDismissible: false, // user must tap button!
- builder: (BuildContext context) {
- return const DeleteDialog(
- key: Key("delete_dialog"),
- );
- },
- );
- }
-
- @override
- Widget build(BuildContext context) {
- final loc = AppLocalizations.of(context)!;
-
- return AlertDialog(
- backgroundColor: Colors.white,
- scrollable: false,
- titlePadding: const EdgeInsets.all(16.0),
- contentPadding: const EdgeInsets.fromLTRB(16.0, 0, 16.0, 16.0),
- title: _titleWidget(context, loc),
- content: _content(context, loc),
- );
- }
-
- Widget _titleWidget(BuildContext context, AppLocalizations loc) {
- return Card(
- elevation: 4,
- margin: EdgeInsets.zero,
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(12),
- side: BorderSide(
- color: Colors.grey[300]!,
- width: 1,
- ),
- ),
- child: Padding(
- padding: const EdgeInsets.all(12.0),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Row(
- children: [
- Icon(
- Icons.warning_amber_rounded,
- size: 32,
- color: Colors.orange[700],
- ),
- const SizedBox(width: 16),
- Text(
- loc.deleteDialogTitle,
- style: Theme.of(context).textTheme.headlineSmall?.copyWith(
- fontWeight: FontWeight.bold,
- ),
- ),
- ],
- ),
- IconButton(
- key: const Key("close_button"),
- icon: const Icon(Icons.close),
- onPressed: () => Navigator.pop(context, false),
- ),
- ],
- ),
- ),
- );
- }
-
- Widget _content(BuildContext context, AppLocalizations loc) {
- return SizedBox(
- width: 400,
- child: Column(
- mainAxisSize: MainAxisSize.min,
- children: [
- Card(
- elevation: 2,
- margin: EdgeInsets.zero,
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(12),
- side: BorderSide(
- color: Colors.grey[300]!,
- width: 1,
- ),
- ),
- child: Padding(
- padding: const EdgeInsets.all(16.0),
- child: Row(
- children: [
- Icon(
- Icons.warning_amber_rounded,
- size: 48,
- color: Colors.orange[700],
- ),
- const SizedBox(width: 16),
- Expanded(
- child: Text(
- loc.deleteDialogText,
- style: Theme.of(context).textTheme.bodyLarge,
- ),
- ),
- ],
- ),
- ),
- ),
- const SizedBox(height: 16),
- Row(
- mainAxisAlignment: MainAxisAlignment.end,
- children: [
- TextButton(
- key: const Key("delete_dialog:cancel"),
- style: TextButton.styleFrom(
- padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(8),
- ),
- ),
- onPressed: () => Navigator.pop(context, false),
- child: Text(loc.deleteDialogButtonCancel),
- ),
- const SizedBox(width: 8),
- ElevatedButton.icon(
- key: const Key("delete_dialog:approve"),
- style: ElevatedButton.styleFrom(
- padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
- backgroundColor: Colors.red[600],
- foregroundColor: Colors.white,
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(8),
- ),
- ),
- onPressed: () => Navigator.pop(context, true),
- icon: const Icon(Icons.delete, size: 20),
- label: Text(loc.deleteDialogButtonApprove),
- ),
- ],
- ),
- ],
- ),
- );
- }
-}
-
-class DeleteDialogResult {
- final String msg;
- final bool warning;
-
- DeleteDialogResult({required this.msg, required this.warning});
-}
diff --git a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/dialog/snackbar_utils.dart b/hartmann-foto-documentation-frontend/lib/pages/ui_utils/dialog/snackbar_utils.dart
deleted file mode 100644
index 7712646..0000000
--- a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/dialog/snackbar_utils.dart
+++ /dev/null
@@ -1,85 +0,0 @@
-import 'package:flutter/material.dart';
-
-abstract interface class SnackbarUtils {
- void showSnackbar(BuildContext context, String msg, bool warning);
- void showSnackbarPopup(BuildContext context, String msg, bool warning);
-}
-
-class SnackbarUtilsImpl implements SnackbarUtils {
- @override
- void showSnackbar(BuildContext context, String msg, bool warning) {
- var snackBar = SnackBar(
- content: _contentFor(context, msg, warning),
- backgroundColor: Colors.white,
- behavior: SnackBarBehavior.floating,
- showCloseIcon: true,
- closeIconColor: Theme.of(context).colorScheme.inversePrimary,
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(6),
- side: BorderSide(width: 2.0, style: BorderStyle.solid, color: Theme.of(context).colorScheme.inversePrimary),
- ),
- margin: EdgeInsets.only(bottom: MediaQuery.of(context).size.height - 130, left: MediaQuery.of(context).size.width - 400, right: 10),
- );
-
- ScaffoldMessenger.of(context).showSnackBar(snackBar);
- }
-
- @override
- void showSnackbarPopup(BuildContext context, String msg, bool warning) {
- var snackBar = SnackBar(
- content: _contentFor(context, msg, warning),
- backgroundColor: Colors.white,
- behavior: SnackBarBehavior.floating,
- showCloseIcon: true,
- closeIconColor: Theme.of(context).colorScheme.inversePrimary,
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(6),
- side: BorderSide(width: 2.0, style: BorderStyle.solid, color: Theme.of(context).colorScheme.inversePrimary),
- ),
- width: 350,
- //margin: EdgeInsets.only(bottom: MediaQuery.of(context).size.height - 100, left: MediaQuery.of(context).size.width - 350, right: 10),
- );
-
- ScaffoldMessenger.of(context).showSnackBar(snackBar);
- }
-
- Widget _contentFor(BuildContext context, String msg, bool warning) {
- var icon = _iconFor(context, warning);
-
- var style = _textStyleFor(context, warning);
- return Wrap(
- alignment: WrapAlignment.start,
- crossAxisAlignment: WrapCrossAlignment.center,
- children: [
- icon,
- Text(
- msg,
- style: style,
- ),
- ],
- );
- }
-
- Icon _iconFor(BuildContext context, bool warning) {
- var color = _contentColor(context, warning);
- return warning ? Icon(Icons.error, color: color) : Icon(Icons.check_circle_outline, color: color);
- }
-
- TextStyle _textStyleFor(BuildContext context, bool warning) {
- var color = _contentColor(context, warning);
- var bodyLarge = Theme.of(context).primaryTextTheme.bodyLarge!;
- var style = TextStyle(
- color: color,
- decoration: bodyLarge.decoration,
- fontFamily: bodyLarge.fontFamily,
- fontSize: bodyLarge.fontSize,
- fontWeight: bodyLarge.fontWeight,
- letterSpacing: bodyLarge.letterSpacing,
- textBaseline: bodyLarge.textBaseline);
- return style;
- }
-
- Color _contentColor(BuildContext context, bool warning) {
- return warning ? Theme.of(context).colorScheme.error : Theme.of(context).colorScheme.inversePrimary;
- }
-}
diff --git a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/general_style.dart b/hartmann-foto-documentation-frontend/lib/pages/ui_utils/general_style.dart
index 546db65..52ce973 100644
--- a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/general_style.dart
+++ b/hartmann-foto-documentation-frontend/lib/pages/ui_utils/general_style.dart
@@ -1,9 +1,7 @@
import 'package:flutter/material.dart';
abstract interface class GeneralStyle {
- ButtonStyle get elevatedButtonStyle;
- ButtonStyle get roundedButtonStyle;
-
+
Color get primaryTextLabelColor;
Color get secondaryTextLabelColor;
@@ -14,23 +12,12 @@ abstract interface class GeneralStyle {
Color get pageBackgroundColor;
- Color get primaryCardColor;
-
Color get errorColor;
String get fontFamily;
}
class GeneralStyleImpl implements GeneralStyle {
- static final ButtonStyle _elevatedButtonStyle = ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20));
- static final ButtonStyle _roundedButtonStyle = ElevatedButton.styleFrom(shape: const CircleBorder(), padding: const EdgeInsets.all(8));
-
- @override
- ButtonStyle get elevatedButtonStyle => _elevatedButtonStyle;
-
- @override
- ButtonStyle get roundedButtonStyle => _roundedButtonStyle;
-
@override
Color get primaryTextLabelColor => const Color(0xFF0045FF);
@@ -45,10 +32,7 @@ class GeneralStyleImpl implements GeneralStyle {
@override
Color get primaryButtonTextColor => Colors.white;
-
- @override
- Color get primaryCardColor => Colors.white;
-
+
@override
Color get pageBackgroundColor => const Color(0xFFF5F5F5);
diff --git a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/header_button_wrapper.dart b/hartmann-foto-documentation-frontend/lib/pages/ui_utils/header_button_wrapper.dart
deleted file mode 100644
index 7aedc2c..0000000
--- a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/header_button_wrapper.dart
+++ /dev/null
@@ -1,89 +0,0 @@
-import 'package:flutter/material.dart';
-
-class HeaderButtonWrapper extends StatefulWidget {
- final IconData icon;
- final String tooltip;
- final VoidCallback onPressed;
- final Color? iconColor;
- final int? badgeCount;
-
- const HeaderButtonWrapper({
- super.key,
- required this.icon,
- required this.tooltip,
- required this.onPressed,
- this.iconColor,
- this.badgeCount,
- });
-
- @override
- State createState() => _HeaderButtonWrapperState();
-}
-
-class _HeaderButtonWrapperState extends State {
- bool _isHovered = false;
-
- @override
- Widget build(BuildContext context) {
- return MouseRegion(
- onEnter: (_) => setState(() => _isHovered = true),
- onExit: (_) => setState(() => _isHovered = false),
- child: Tooltip(
- message: widget.tooltip,
- child: Stack(
- clipBehavior: Clip.none,
- children: [
- Container(
- decoration: BoxDecoration(
- color: _isHovered ? Colors.blue[50] : Colors.transparent,
- borderRadius: BorderRadius.circular(12),
- border: Border.all(
- color: _isHovered ? Colors.blue[200]! : Colors.transparent,
- width: 1,
- ),
- ),
- child: IconButton(
- icon: Icon(
- widget.icon,
- size: 24,
- color: widget.iconColor ?? Colors.grey[700],
- ),
- onPressed: widget.onPressed,
- splashRadius: 24,
- ),
- ),
- if (widget.badgeCount != null && widget.badgeCount! > 0)
- Positioned(
- right: 4,
- top: 4,
- child: Container(
- padding: const EdgeInsets.all(4),
- decoration: BoxDecoration(
- color: Colors.red[600],
- shape: BoxShape.circle,
- border: Border.all(
- color: Colors.white,
- width: 2,
- ),
- ),
- constraints: const BoxConstraints(
- minWidth: 20,
- minHeight: 20,
- ),
- child: Text(
- widget.badgeCount! > 99 ? '99+' : widget.badgeCount.toString(),
- style: const TextStyle(
- color: Colors.white,
- fontSize: 10,
- fontWeight: FontWeight.bold,
- ),
- textAlign: TextAlign.center,
- ),
- ),
- ),
- ],
- ),
- ),
- );
- }
-}
\ No newline at end of file
diff --git a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/header_utils.dart b/hartmann-foto-documentation-frontend/lib/pages/ui_utils/header_utils.dart
deleted file mode 100644
index 3fc1fe8..0000000
--- a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/header_utils.dart
+++ /dev/null
@@ -1,75 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:fotodocumentation/utils/di_container.dart';
-import 'package:fotodocumentation/utils/login_credentials.dart';
-
-abstract interface class HeaderUtils {
- Widget titleWidget(String text);
-}
-
-class HeaderUtilsImpl extends HeaderUtils {
- LoginCredentials get _loginCredentials => DiContainer.get();
-
- @override
- Widget titleWidget(String text) {
- return Column(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Row(
- children: [
- Icon(
- Icons.school,
- size: 28,
- color: Colors.blue[700],
- ),
- const SizedBox(width: 12),
- Text(
- text,
- style: const TextStyle(
- fontSize: 22,
- fontWeight: FontWeight.bold,
- color: Colors.black87,
- ),
- ),
- ],
- ),
- const SizedBox(height: 4),
- if (_loginCredentials.fullname.isNotEmpty) ...[
- Padding(
- padding: const EdgeInsets.only(left: 40.0),
- child: Container(
- padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4),
- decoration: BoxDecoration(
- color: Colors.blue[50],
- borderRadius: BorderRadius.circular(12),
- border: Border.all(
- color: Colors.blue[200]!,
- width: 1,
- ),
- ),
- child: Row(
- mainAxisSize: MainAxisSize.min,
- children: [
- Icon(
- Icons.person_outline,
- size: 14,
- color: Colors.blue[700],
- ),
- const SizedBox(width: 6),
- Text(
- _loginCredentials.fullname,
- style: TextStyle(
- fontSize: 12,
- color: Colors.blue[900],
- fontWeight: FontWeight.w500,
- ),
- ),
- ],
- ),
- ),
- ),
- ],
- ],
- );
- }
-}
diff --git a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/modern_app_bar.dart b/hartmann-foto-documentation-frontend/lib/pages/ui_utils/modern_app_bar.dart
deleted file mode 100644
index db7b262..0000000
--- a/hartmann-foto-documentation-frontend/lib/pages/ui_utils/modern_app_bar.dart
+++ /dev/null
@@ -1,99 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:fotodocumentation/pages/ui_utils/header_button_wrapper.dart';
-
-class ModernAppBar extends StatelessWidget implements PreferredSizeWidget {
- final Widget title;
- final List actions;
- final Widget? leading;
- final bool automaticallyImplyLeading;
-
- const ModernAppBar({
- super.key,
- required this.title,
- this.actions = const [],
- this.leading,
- this.automaticallyImplyLeading = true,
- });
-
- @override
- Widget build(BuildContext context) {
- Widget? effectiveLeading = _effectiveLeading(context);
- return Container(
- decoration: BoxDecoration(
- color: Colors.grey[50],
- border: Border(
- bottom: BorderSide(
- color: Colors.grey[300]!,
- width: 1,
- ),
- ),
- ),
- child: SafeArea(
- child: Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
- child: Row(
- children: [
- if (effectiveLeading != null) ...[
- effectiveLeading,
- const SizedBox(width: 16),
- ],
- Expanded(child: title),
- const SizedBox(width: 16),
- ...actions.map((action) => Padding(
- padding: const EdgeInsets.only(left: 8.0),
- child: action,
- )),
- ],
- ),
- ),
- ),
- );
- }
-
- Widget? _effectiveLeading(BuildContext context) {
- // Determine if we should show a back button
- final ScaffoldState? scaffold = Scaffold.maybeOf(context);
- final ModalRoute? parentRoute = ModalRoute.of(context);
- final bool hasDrawer = scaffold?.hasDrawer ?? false;
- final bool canPop = parentRoute?.canPop ?? false;
- final bool useCloseButton = parentRoute is PageRoute && parentRoute.fullscreenDialog;
-
- Widget? effectiveLeading = leading;
- if (effectiveLeading == null && automaticallyImplyLeading) {
- if (hasDrawer) {
- effectiveLeading = HeaderButtonWrapper(
- icon: Icons.menu,
- onPressed: () {
- Scaffold.of(context).openDrawer();
- },
- tooltip: MaterialLocalizations.of(context).openAppDrawerTooltip,
- iconColor: Colors.grey[700],
- );
- } else if (canPop) {
- if (useCloseButton) {
- effectiveLeading = HeaderButtonWrapper(
- icon: Icons.close,
- onPressed: () {
- Navigator.of(context).pop();
- },
- tooltip: MaterialLocalizations.of(context).closeButtonTooltip,
- iconColor: Colors.grey[700],
- );
- } else {
- effectiveLeading = HeaderButtonWrapper(
- icon: Icons.arrow_back,
- onPressed: () {
- Navigator.of(context).pop();
- },
- tooltip: MaterialLocalizations.of(context).backButtonTooltip,
- iconColor: Colors.grey[700],
- );
- }
- }
- }
- return effectiveLeading;
- }
-
- @override
- Size get preferredSize => const Size.fromHeight(80);
-}
diff --git a/hartmann-foto-documentation-frontend/lib/utils/di_container.dart b/hartmann-foto-documentation-frontend/lib/utils/di_container.dart
index da1e34d..a2409c6 100644
--- a/hartmann-foto-documentation-frontend/lib/utils/di_container.dart
+++ b/hartmann-foto-documentation-frontend/lib/utils/di_container.dart
@@ -1,9 +1,7 @@
import 'package:fotodocumentation/controller/customer_controller.dart';
import 'package:fotodocumentation/controller/login_controller.dart';
import 'package:fotodocumentation/controller/picture_controller.dart';
-import 'package:fotodocumentation/pages/ui_utils/dialog/snackbar_utils.dart';
import 'package:fotodocumentation/pages/ui_utils/general_style.dart';
-import 'package:fotodocumentation/pages/ui_utils/header_utils.dart';
import 'package:fotodocumentation/utils/http_client_utils.dart';
import 'package:fotodocumentation/utils/jwt_token_storage.dart';
import 'package:fotodocumentation/utils/login_credentials.dart';
@@ -24,9 +22,7 @@ class DiContainer {
DiContainer.instance.put(GeneralStyle, GeneralStyleImpl());
DiContainer.instance.put(JwtTokenStorage, JwtTokenStorageImpl());
DiContainer.instance.put(HttpClientUtils, HttpCLientUtilsImpl());
- DiContainer.instance.put(HeaderUtils, HeaderUtilsImpl());
DiContainer.instance.put(UrlUtils, UrlUtilsImpl());
- DiContainer.instance.put(SnackbarUtils, SnackbarUtilsImpl());
DiContainer.instance.put(LoginController, LoginControllerImpl());
DiContainer.instance.put(CustomerController, CustomerControllerImpl());
DiContainer.instance.put(PictureController, PictureControllerImpl());
diff --git a/hartmann-foto-documentation-frontend/test/controller/customer_controller_test.dart b/hartmann-foto-documentation-frontend/test/controller/customer_controller_test.dart
new file mode 100644
index 0000000..920f07e
--- /dev/null
+++ b/hartmann-foto-documentation-frontend/test/controller/customer_controller_test.dart
@@ -0,0 +1,100 @@
+import 'package:flutter_test/flutter_test.dart';
+import 'package:fotodocumentation/controller/base_controller.dart';
+import 'package:fotodocumentation/controller/customer_controller.dart';
+import 'package:fotodocumentation/dto/customer_dto.dart';
+import 'package:fotodocumentation/utils/di_container.dart';
+import 'package:fotodocumentation/utils/http_client_utils.dart';
+import 'package:fotodocumentation/utils/jwt_token_storage.dart';
+import 'package:http/http.dart' as http;
+import 'package:mockito/mockito.dart';
+
+import '../testing/test_http_client_utils.dart';
+import '../testing/test_utils.mocks.dart';
+
+void main() {
+ DiContainer.instance.initState();
+ var jwtTokenStorage = MockJwtTokenStorage();
+ when(jwtTokenStorage.getAccessToken()).thenAnswer((_) async => null);
+ DiContainer.instance.put(JwtTokenStorage, jwtTokenStorage);
+
+ CustomerController controller = CustomerControllerImpl();
+
+ group('PictureControllerTest', () {
+ test('returns a list of customers', () async {
+ final client = MockClient();
+ DiContainer.instance.put(HttpClientUtils, TestHttpCLientUtilsImpl(client));
+ when(client.get(Uri.parse('http://localhost:8080/api/customer?query=&startsWith='), headers: {"Accept-Language": "en-US"})).thenAnswer((_) async => http.Response(_customersJson, 200));
+
+ var dtos = await controller.getAll("", "");
+ expect(dtos, isA>());
+ expect(dtos.length, 3);
+ });
+
+ test('throws an exception if the http call completes with an error', () async {
+ final client = MockClient();
+ DiContainer.instance.put(HttpClientUtils, TestHttpCLientUtilsImpl(client));
+
+ when(client.get(Uri.parse('http://localhost:8080/api/customer?query=&startsWith='), headers: {"Accept-Language": "en-US"})).thenAnswer((_) async => http.Response('Not Found', 404));
+
+ expect(() async => await controller.getAll("", ""), throwsA(isA()));
+ });
+ });
+
+
+ test('returns a customer', () async {
+ final client = MockClient();
+ DiContainer.instance.put(HttpClientUtils, TestHttpCLientUtilsImpl(client));
+
+ when(client.get(Uri.parse('http://localhost:8080/api/customer/4'), headers: {"Accept-Language": "en-US"}))
+ .thenAnswer((_) async => http.Response(_customerJson, 200));
+
+ var dto = await controller.get(id: 4);
+ expect(dto, isA());
+ });
+}
+
+String _customersJson = '''[
+ {
+ "id": 1,
+ "name": "Müller Apotheke",
+ "customerNumber": "1234",
+ "lastUpdateDate": 1729764570000
+ },
+ {
+ "id": 2,
+ "name": "Meier Apotheke",
+ "customerNumber": "2345",
+ "lastUpdateDate": 1729764570000
+ },
+ {
+ "id": 3,
+ "name": "Schmidt Apotheke",
+ "customerNumber": "3456",
+ "lastUpdateDate": 1729764570000
+ }
+]''';
+
+String _customerJson = '''{
+ "id": 1,
+ "name": "Müller Apotheke",
+ "customerNumber": "1234",
+ "pictures": [
+ {
+ "id": 1,
+ "comment": "good looking picture 1",
+ "category": null,
+ "image": "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",
+ "pictureDate": 1729764570000,
+ "username": "verboomp"
+ },
+ {
+ "id": 2,
+ "comment": "good looking picture 2",
+ "category": null,
+ "image": "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",
+ "pictureDate": 1729764570000,
+ "username": "verboomp"
+ }
+ ]
+}''';
+
diff --git a/hartmann-foto-documentation-frontend/test/controller/login_controller_test.dart b/hartmann-foto-documentation-frontend/test/controller/login_controller_test.dart
new file mode 100644
index 0000000..0b38a82
--- /dev/null
+++ b/hartmann-foto-documentation-frontend/test/controller/login_controller_test.dart
@@ -0,0 +1,80 @@
+import 'package:flutter_test/flutter_test.dart';
+import 'package:fotodocumentation/controller/login_controller.dart';
+import 'package:fotodocumentation/utils/di_container.dart';
+import 'package:fotodocumentation/utils/http_client_utils.dart';
+import 'package:fotodocumentation/utils/jwt_token_storage.dart';
+import 'package:http/http.dart' as http;
+import 'package:mockito/mockito.dart';
+
+import '../testing/test_http_client_utils.dart';
+import '../testing/test_utils.mocks.dart';
+
+void main() {
+ TestWidgetsFlutterBinding.ensureInitialized();
+ DiContainer.instance.initState();
+ var jwtTokenStorage = MockJwtTokenStorage();
+ when(jwtTokenStorage.getAccessToken()).thenAnswer((_) async => null);
+ DiContainer.instance.put(JwtTokenStorage, jwtTokenStorage);
+
+ LoginController controller = LoginControllerImpl();
+
+ group('LoginController', () {
+ test('authenticate returns JwtTokenPairDto on successful login', () async {
+ final client = MockClient();
+ DiContainer.instance.put(HttpClientUtils, TestHttpCLientUtilsImpl(client));
+
+ when(jwtTokenStorage.saveTokens(any, any)).thenAnswer((_) async => {});
+ when(client.get(Uri.parse('http://localhost:8080/api/login'), headers: anyNamed('headers')))
+ .thenAnswer((_) async => http.Response(_jwtTokenPairJson, 200));
+
+ var reply = await controller.authenticate("testuser", "testpass");
+ expect(reply.jwtTokenPairDto, isNotNull);
+ expect(reply.jwtTokenPairDto?.accessToken, "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.access");
+ expect(reply.jwtTokenPairDto?.refreshToken, "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.refresh");
+ verify(jwtTokenStorage.saveTokens(any, any)).called(1);
+ });
+
+
+
+ test('authenticate returns null on authentication failure (401)', () async {
+ final client = MockClient();
+ DiContainer.instance.put(HttpClientUtils, TestHttpCLientUtilsImpl(client));
+
+ when(client.get(Uri.parse('http://localhost:8080/api/login'), headers: anyNamed('headers')))
+ .thenAnswer((_) async => http.Response('Unauthorized', 401));
+
+ var reply = await controller.authenticate("wronguser", "wrongpass");
+ expect(reply.jwtTokenPairDto, isNull);
+ verifyNever(jwtTokenStorage.saveTokens(any, any));
+ });
+
+ test('authenticate returns null on server error (500)', () async {
+ final client = MockClient();
+ DiContainer.instance.put(HttpClientUtils, TestHttpCLientUtilsImpl(client));
+
+ when(client.get(Uri.parse('http://localhost:8080/api/login'), headers: anyNamed('headers')))
+ .thenAnswer((_) async => http.Response('Internal Server Error', 500));
+
+ var reply = await controller.authenticate("testuser", "testpass");
+ expect(reply.jwtTokenPairDto, isNull);
+ verifyNever(jwtTokenStorage.saveTokens(any, any));
+ });
+
+ test('authenticate returns null on exception', () async {
+ final client = MockClient();
+ DiContainer.instance.put(HttpClientUtils, TestHttpCLientUtilsImpl(client));
+
+ when(client.get(Uri.parse('http://localhost:8080/api/login'), headers: anyNamed('headers')))
+ .thenThrow(Exception('Network error'));
+
+ var reply = await controller.authenticate("testuser", "testpass");
+ expect(reply.jwtTokenPairDto, isNull);
+ verifyNever(jwtTokenStorage.saveTokens(any, any));
+ });
+ });
+}
+
+String _jwtTokenPairJson = '''{
+ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.access",
+ "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.refresh"
+}''';
diff --git a/hartmann-foto-documentation-frontend/test/controller/picture_controller_test.dart b/hartmann-foto-documentation-frontend/test/controller/picture_controller_test.dart
new file mode 100644
index 0000000..5876c1c
--- /dev/null
+++ b/hartmann-foto-documentation-frontend/test/controller/picture_controller_test.dart
@@ -0,0 +1,41 @@
+import 'package:flutter_test/flutter_test.dart';
+import 'package:fotodocumentation/controller/picture_controller.dart';
+import 'package:fotodocumentation/dto/picture_dto.dart';
+import 'package:fotodocumentation/utils/di_container.dart';
+import 'package:fotodocumentation/utils/http_client_utils.dart';
+import 'package:fotodocumentation/utils/jwt_token_storage.dart';
+import 'package:http/http.dart' as http;
+import 'package:mockito/mockito.dart';
+
+import '../testing/test_http_client_utils.dart';
+import '../testing/test_utils.mocks.dart';
+
+void main() {
+ DiContainer.instance.initState();
+ var jwtTokenStorage = MockJwtTokenStorage();
+ when(jwtTokenStorage.getAccessToken()).thenAnswer((_) async => null);
+ DiContainer.instance.put(JwtTokenStorage, jwtTokenStorage);
+
+ PictureController controller = PictureControllerImpl();
+
+ group('PictureControllerTest', () {
+ test('returns true if delete success', () async {
+ _testDelete(controller, 200, true);
+ });
+
+ test('returns false if delete failed', () async {
+ _testDelete(controller, 404, false);
+ });
+ });
+}
+
+void _testDelete(PictureController controller, int response, bool expected) async {
+ final client = MockClient();
+ DiContainer.instance.put(HttpClientUtils, TestHttpCLientUtilsImpl(client));
+
+ when(client.delete(Uri.parse('http://localhost:8080/api/picture/4'), headers: {"Accept-Language": "en-US"})).thenAnswer((_) async => http.Response("", response));
+
+ var dto = await controller.delete(PictureDto(id: 4, image: "", pictureDate: DateTime.now(), category: "", comment: "", username: ""));
+ expect(dto, expected);
+}
+
diff --git a/hartmann-foto-documentation-frontend/test/main_test.dart b/hartmann-foto-documentation-frontend/test/main_test.dart
new file mode 100644
index 0000000..b975ae0
--- /dev/null
+++ b/hartmann-foto-documentation-frontend/test/main_test.dart
@@ -0,0 +1,146 @@
+import 'dart:ui' show PointerDeviceKind;
+
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:fotodocumentation/main.dart';
+import 'package:fotodocumentation/utils/di_container.dart';
+import 'package:fotodocumentation/utils/login_credentials.dart';
+import 'package:fotodocumentation/utils/main_utils.dart';
+
+import 'testing/test_utils.dart';
+
+void main() {
+ TestWidgetsFlutterBinding.ensureInitialized();
+ DiContainer.instance.initState();
+ DiContainer.instance.put(LoginCredentials, getDefaultLoginCredentials());
+
+ group('FotoDocumentationApp', () {
+ testWidgets('renders MaterialApp with router', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await tester.pumpWidget(
+ FotoDocumentationApp(theme: ThemeData.light()),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify MaterialApp.router is used
+ expect(find.byType(MaterialApp), findsOneWidget);
+ });
+
+ testWidgets('has correct app title', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await tester.pumpWidget(
+ FotoDocumentationApp(theme: ThemeData.light()),
+ );
+ await tester.pumpAndSettle();
+
+ // Find the MaterialApp and verify its title
+ final materialApp = tester.widget(find.byType(MaterialApp));
+ expect(materialApp.title, equals('Hartmann Foto App'));
+ });
+
+ testWidgets('uses custom scroll behavior', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await tester.pumpWidget(
+ FotoDocumentationApp(theme: ThemeData.light()),
+ );
+ await tester.pumpAndSettle();
+
+ // Find the MaterialApp and verify its scrollBehavior type
+ final materialApp = tester.widget(find.byType(MaterialApp));
+ expect(materialApp.scrollBehavior, isA());
+ });
+
+ testWidgets('supports German locale', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await tester.pumpWidget(
+ FotoDocumentationApp(theme: ThemeData.light()),
+ );
+ await tester.pumpAndSettle();
+
+ // Find the MaterialApp and verify German is in supported locales
+ final materialApp = tester.widget(find.byType(MaterialApp));
+ expect(materialApp.supportedLocales, contains(const Locale('de')));
+ });
+
+ testWidgets('has localization delegates configured', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await tester.pumpWidget(
+ FotoDocumentationApp(theme: ThemeData.light()),
+ );
+ await tester.pumpAndSettle();
+
+ // Find the MaterialApp and verify localization delegates are set
+ final materialApp = tester.widget(find.byType(MaterialApp));
+ expect(materialApp.localizationsDelegates, isNotNull);
+ expect(materialApp.localizationsDelegates!.length, equals(4));
+ });
+
+ testWidgets('applies provided theme', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ final customTheme = ThemeData(
+ primarySwatch: Colors.blue,
+ brightness: Brightness.light,
+ );
+
+ await tester.pumpWidget(
+ FotoDocumentationApp(theme: customTheme),
+ );
+ await tester.pumpAndSettle();
+
+ // Find the MaterialApp and verify the theme is applied
+ final materialApp = tester.widget(find.byType(MaterialApp));
+ expect(materialApp.theme, equals(customTheme));
+ });
+
+ testWidgets('applies dark theme when provided', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ final darkTheme = ThemeData.dark();
+
+ await tester.pumpWidget(
+ FotoDocumentationApp(theme: darkTheme),
+ );
+ await tester.pumpAndSettle();
+
+ // Find the MaterialApp and verify the dark theme is applied
+ final materialApp = tester.widget(find.byType(MaterialApp));
+ expect(materialApp.theme, equals(darkTheme));
+ });
+
+ testWidgets('uses router config', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await tester.pumpWidget(
+ FotoDocumentationApp(theme: ThemeData.light()),
+ );
+ await tester.pumpAndSettle();
+
+ // Find the MaterialApp and verify routerConfig is set
+ final materialApp = tester.widget(find.byType(MaterialApp));
+ expect(materialApp.routerConfig, isNotNull);
+ });
+ });
+
+ group('MyCustomScrollBehavior', () {
+ test('includes touch pointer device', () {
+ final scrollBehavior = MyCustomScrollBehavior();
+ expect(scrollBehavior.dragDevices, contains(PointerDeviceKind.touch));
+ });
+
+ test('includes mouse pointer device', () {
+ final scrollBehavior = MyCustomScrollBehavior();
+ expect(scrollBehavior.dragDevices, contains(PointerDeviceKind.mouse));
+ });
+
+ test('extends MaterialScrollBehavior', () {
+ final scrollBehavior = MyCustomScrollBehavior();
+ expect(scrollBehavior, isA());
+ });
+ });
+}
diff --git a/hartmann-foto-documentation-frontend/test/pages/customer_list_widget_test.dart b/hartmann-foto-documentation-frontend/test/pages/customer_list_widget_test.dart
new file mode 100644
index 0000000..c6608f1
--- /dev/null
+++ b/hartmann-foto-documentation-frontend/test/pages/customer_list_widget_test.dart
@@ -0,0 +1,48 @@
+
+
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:fotodocumentation/utils/global_router.dart';
+import 'package:fotodocumentation/utils/login_credentials.dart';
+import 'package:mockito/mockito.dart';
+
+import 'package:fotodocumentation/controller/customer_controller.dart';
+import 'package:fotodocumentation/dto/customer_dto.dart';
+import 'package:fotodocumentation/utils/di_container.dart';
+
+import '../testing/test_utils.dart';
+import '../testing/test_utils.mocks.dart';
+
+void main() {
+ TestWidgetsFlutterBinding.ensureInitialized();
+ DiContainer.instance.initState();
+ DiContainer.instance.put(LoginCredentials, getDefaultLoginCredentials());
+ group('Customer List Test', () {
+ testWidgets('Customer list screen search test', (WidgetTester tester) async {
+ await _searchtest(tester);
+ });
+ });
+}
+
+List _list = [CustomerListDto(id: 1, customerNumber: "CODE1", name: "Customer 1"), CustomerListDto(id: 2, customerNumber: "CODE2", name: "Customer 2")];
+
+Future _searchtest(WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+ String searchText = 'Henk';
+
+ var controller = MockCustomerController();
+ DiContainer.instance.put(CustomerController, controller);
+
+ when(controller.getAll("", "")).thenAnswer((_) async => _list);
+ when(controller.getAll(searchText, "")).thenAnswer((_) async => [_list.first]);
+
+ await pumpAppConfig(tester, GlobalRouter.pathHome);
+ verify(controller.getAll(argThat(equals("")), argThat(equals("")))).called(1);
+
+ await tester.enterText(find.byKey(Key("Search_text_field")), searchText);
+
+ await tester.testTextInput.receiveAction(TextInputAction.done);
+
+ await tester.pumpAndSettle();
+ verify(controller.getAll(searchText, "")).called(1);
+}
\ No newline at end of file
diff --git a/hartmann-foto-documentation-frontend/test/pages/customer_widget_test.dart b/hartmann-foto-documentation-frontend/test/pages/customer_widget_test.dart
new file mode 100644
index 0000000..9f6649a
--- /dev/null
+++ b/hartmann-foto-documentation-frontend/test/pages/customer_widget_test.dart
@@ -0,0 +1,106 @@
+import 'package:flutter/material.dart';
+import 'package:flutter/semantics.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:fotodocumentation/dto/picture_dto.dart';
+import 'package:fotodocumentation/pages/customer/picture_delete_dialog.dart';
+import 'package:fotodocumentation/pages/customer/picture_widget.dart';
+import 'package:fotodocumentation/utils/global_router.dart';
+import 'package:fotodocumentation/utils/login_credentials.dart';
+import 'package:mockito/mockito.dart';
+
+import 'package:fotodocumentation/controller/customer_controller.dart';
+import 'package:fotodocumentation/controller/picture_controller.dart';
+import 'package:fotodocumentation/dto/customer_dto.dart';
+import 'package:fotodocumentation/utils/di_container.dart';
+
+import '../testing/test_utils.dart';
+import '../testing/test_utils.mocks.dart';
+
+void main() {
+ TestWidgetsFlutterBinding.ensureInitialized();
+ DiContainer.instance.initState();
+ DiContainer.instance.put(LoginCredentials, getDefaultLoginCredentials());
+ group('Customer Test', () {
+ testWidgets('Customer screen', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ var controller = MockCustomerController();
+ var pictureController = MockPictureController();
+ DiContainer.instance.put(PictureController, pictureController);
+ DiContainer.instance.put(CustomerController, controller);
+
+ when(controller.get(id: 1)).thenAnswer((_) async => _list);
+
+ await pumpAppConfig(tester, "${GlobalRouter.pathCustomer}/1");
+ verify(controller.get(id: 1)).called(1);
+
+ // Click on the first row (InkWell) to open the picture popup
+ await tester.tap(find.byKey(Key("table_row_1")).first);
+ await tester.pumpAndSettle();
+
+ // Verify that the popup is shown by checking for the PictureWidget
+ expect(find.byType(PictureWidget), findsOneWidget);
+ });
+
+ testWidgets('Customer delete yes', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ var controller = MockCustomerController();
+ var pictureController = MockPictureController();
+ DiContainer.instance.put(PictureController, pictureController);
+ DiContainer.instance.put(CustomerController, controller);
+
+ when(controller.get(id: 1)).thenAnswer((_) async => _list);
+ when(pictureController.delete(argThat(isA()))).thenAnswer((_) async => true);
+
+ await pumpAppConfig(tester, "${GlobalRouter.pathCustomer}/1");
+ verify(controller.get(id: 1)).called(1);
+
+ // Click on the first row (InkWell) to open the picture popup
+ await tester.tap(find.byKey(Key("table_row_delete_1")).first);
+ await tester.pumpAndSettle();
+
+ // Verify that the popup is shown by checking for the PictureWidget
+ expect(find.byType(PictureDeleteDialog), findsOneWidget);
+
+ // Click the yes button to confirm delete
+ await tester.tap(find.byKey(Key("picture_delete_yes")));
+ await tester.pumpAndSettle();
+
+ // Verify that the delete method was called on the picture controller
+ verify(pictureController.delete(argThat(isA()))).called(1);
+ });
+
+ testWidgets('Customer delete no', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ var controller = MockCustomerController();
+ var pictureController = MockPictureController();
+ DiContainer.instance.put(PictureController, pictureController);
+ DiContainer.instance.put(CustomerController, controller);
+
+ when(controller.get(id: 1)).thenAnswer((_) async => _list);
+
+ await pumpAppConfig(tester, "${GlobalRouter.pathCustomer}/1");
+ verify(controller.get(id: 1)).called(1);
+
+ // Click on the first row (InkWell) to open the picture popup
+ await tester.tap(find.byKey(Key("table_row_delete_1")).first);
+ await tester.pumpAndSettle();
+
+ // Verify that the popup is shown by checking for the PictureWidget
+ expect(find.byType(PictureDeleteDialog), findsOneWidget);
+
+ // Click the yes button to confirm delete
+ await tester.tap(find.byKey(Key("picture_delete_no")));
+ await tester.pumpAndSettle();
+
+ // Verify that the delete method was called on the picture controller
+ verifyNever(pictureController.delete(argThat(isA())));
+ });
+ });
+}
+
+CustomerDto _list = CustomerDto(id: 1, customerNumber: "CODE1", name: "Customer 1", pictures: [
+ PictureDto(id: 1, comment: "Some comment", category: "category", pictureDate: DateTime.now(), username: "username", image:"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"),
+ ]);
diff --git a/hartmann-foto-documentation-frontend/test/pages/login_widget_test.dart b/hartmann-foto-documentation-frontend/test/pages/login_widget_test.dart
new file mode 100644
index 0000000..37a82ad
--- /dev/null
+++ b/hartmann-foto-documentation-frontend/test/pages/login_widget_test.dart
@@ -0,0 +1,200 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:fotodocumentation/controller/login_controller.dart';
+import 'package:fotodocumentation/dto/jwt_token_pair_dto.dart';
+import 'package:fotodocumentation/pages/login/login_widget.dart';
+import 'package:fotodocumentation/utils/di_container.dart';
+import 'package:fotodocumentation/utils/global_router.dart';
+import 'package:fotodocumentation/utils/login_credentials.dart';
+import 'package:mockito/mockito.dart';
+
+import '../testing/test_utils.dart';
+import '../testing/test_utils.mocks.dart';
+
+void main() {
+ TestWidgetsFlutterBinding.ensureInitialized();
+ DiContainer.instance.initState();
+
+ late MockLoginController mockLoginController;
+ late MockLoginCredentials mockLoginCredentials;
+
+ setUp(() {
+ mockLoginController = MockLoginController();
+ mockLoginCredentials = MockLoginCredentials();
+
+ when(mockLoginCredentials.isLoggedIn).thenReturn(false);
+
+ DiContainer.instance.put(LoginController, mockLoginController);
+ DiContainer.instance.put(LoginCredentials, mockLoginCredentials);
+ });
+
+ group('LoginWidget', () {
+ testWidgets('displays login title', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(tester, const LoginWidget());
+ await tester.pumpAndSettle();
+
+ // Verify the login title is displayed (German localization)
+ expect(find.text('BILDERUPLOAD'), findsOneWidget);
+ });
+
+ testWidgets('displays username and password fields', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(tester, const LoginWidget());
+ await tester.pumpAndSettle();
+
+ // Verify username field exists
+ expect(find.byKey(const Key("username")), findsOneWidget);
+
+ // Verify password field exists
+ expect(find.byKey(const Key("password")), findsOneWidget);
+ });
+
+ testWidgets('displays login button', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(tester, const LoginWidget());
+ await tester.pumpAndSettle();
+
+ // Verify login button exists
+ expect(find.byKey(const Key("SubmitWidgetButton")), findsOneWidget);
+ });
+
+ testWidgets('can enter username and password', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(tester, const LoginWidget());
+ await tester.pumpAndSettle();
+
+ // Enter username
+ await tester.enterText(find.byKey(const Key("username")), 'testuser');
+ await tester.pumpAndSettle();
+
+ // Enter password
+ await tester.enterText(find.byKey(const Key("password")), 'testpassword');
+ await tester.pumpAndSettle();
+
+ // Verify text was entered
+ expect(find.text('testuser'), findsOneWidget);
+ });
+
+ testWidgets('calls authenticate on login button tap', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ final jwtTokenPairDto = JwtTokenPairDto(
+ accessToken: 'test_access_token',
+ refreshToken: 'test_refresh_token',
+ );
+
+ when(mockLoginController.authenticate('testuser', 'testpassword'))
+ .thenAnswer((_) async => (jwtTokenPairDto: jwtTokenPairDto));
+
+ await pumpAppConfig(tester, GlobalRouter.pathLogin);
+ await tester.pumpAndSettle();
+
+ // Enter credentials
+ await tester.enterText(find.byKey(const Key("username")), 'testuser');
+ await tester.enterText(find.byKey(const Key("password")), 'testpassword');
+ await tester.pumpAndSettle();
+
+ // Tap login button
+ await tester.tap(find.byKey(const Key("SubmitWidgetButton")));
+ await tester.pumpAndSettle();
+
+ // Verify authenticate was called with correct credentials
+ verify(mockLoginController.authenticate('testuser', 'testpassword')).called(1);
+ });
+
+ testWidgets('sets logged in on successful authentication', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ final jwtTokenPairDto = JwtTokenPairDto(
+ accessToken: 'test_access_token',
+ refreshToken: 'test_refresh_token',
+ );
+
+ when(mockLoginController.authenticate('testuser', 'testpassword'))
+ .thenAnswer((_) async => (jwtTokenPairDto: jwtTokenPairDto));
+
+ await pumpAppConfig(tester, GlobalRouter.pathLogin);
+ await tester.pumpAndSettle();
+
+ // Enter credentials
+ await tester.enterText(find.byKey(const Key("username")), 'testuser');
+ await tester.enterText(find.byKey(const Key("password")), 'testpassword');
+ await tester.pumpAndSettle();
+
+ // Tap login button
+ await tester.tap(find.byKey(const Key("SubmitWidgetButton")));
+ await tester.pumpAndSettle();
+
+ // Verify setLoggedIn was called
+ verify(mockLoginCredentials.setLoggedIn(true)).called(1);
+ });
+
+ testWidgets('displays error message on failed authentication', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ when(mockLoginController.authenticate('testuser', 'wrongpassword'))
+ .thenAnswer((_) async => (jwtTokenPairDto: null));
+
+ await pumpAppConfig(tester, GlobalRouter.pathLogin);
+ await tester.pumpAndSettle();
+
+ // Enter credentials
+ await tester.enterText(find.byKey(const Key("username")), 'testuser');
+ await tester.enterText(find.byKey(const Key("password")), 'wrongpassword');
+ await tester.pumpAndSettle();
+
+ // Tap login button
+ await tester.tap(find.byKey(const Key("SubmitWidgetButton")));
+ await tester.pumpAndSettle();
+
+ // Verify error message is displayed (German localization)
+ expect(find.text('Falscher Benutzername oder Passwort'), findsOneWidget);
+ });
+
+ testWidgets('does not call setLoggedIn on failed authentication', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ when(mockLoginController.authenticate('testuser', 'wrongpassword'))
+ .thenAnswer((_) async => (jwtTokenPairDto: null));
+
+ await pumpAppConfig(tester, GlobalRouter.pathLogin);
+ await tester.pumpAndSettle();
+
+ // Enter credentials
+ await tester.enterText(find.byKey(const Key("username")), 'testuser');
+ await tester.enterText(find.byKey(const Key("password")), 'wrongpassword');
+ await tester.pumpAndSettle();
+
+ // Tap login button
+ await tester.tap(find.byKey(const Key("SubmitWidgetButton")));
+ await tester.pumpAndSettle();
+
+ // Verify setLoggedIn was NOT called
+ verifyNever(mockLoginCredentials.setLoggedIn(any));
+ });
+
+ testWidgets('password field obscures text', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(tester, const LoginWidget());
+ await tester.pumpAndSettle();
+
+ // Find the EditableText descendant of the password field
+ // TextFormField wraps TextField which contains EditableText
+ final passwordFieldFinder = find.byKey(const Key("password"));
+ final editableTextFinder = find.descendant(
+ of: passwordFieldFinder,
+ matching: find.byType(EditableText),
+ );
+ final editableText = tester.widget(editableTextFinder);
+
+ // Verify obscureText is true
+ expect(editableText.obscureText, isTrue);
+ });
+ });
+}
diff --git a/hartmann-foto-documentation-frontend/test/pages/picture_widget_test.dart b/hartmann-foto-documentation-frontend/test/pages/picture_widget_test.dart
new file mode 100644
index 0000000..a19b559
--- /dev/null
+++ b/hartmann-foto-documentation-frontend/test/pages/picture_widget_test.dart
@@ -0,0 +1,258 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:fotodocumentation/dto/customer_dto.dart' show CustomerDto;
+import 'package:fotodocumentation/dto/picture_dto.dart';
+import 'package:fotodocumentation/pages/customer/picture_widget.dart';
+import 'package:fotodocumentation/pages/customer/picture_fullscreen_dialog.dart';
+import 'package:fotodocumentation/utils/di_container.dart';
+import 'package:fotodocumentation/utils/login_credentials.dart';
+
+import '../testing/test_utils.dart';
+
+// Minimal valid base64 encoded 1x1 pixel PNG image
+const String _testImage =
+ 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==';
+
+void main() {
+ TestWidgetsFlutterBinding.ensureInitialized();
+ DiContainer.instance.initState();
+ DiContainer.instance.put(LoginCredentials, getDefaultLoginCredentials());
+
+ late CustomerDto customerDto;
+ late PictureDto pictureDto1;
+ late PictureDto pictureDto2;
+ late PictureDto pictureDto3;
+
+ setUp(() {
+ pictureDto1 = PictureDto(
+ id: 1,
+ comment: 'First picture comment',
+ category: 'category1',
+ image: _testImage,
+ pictureDate: DateTime(2024, 1, 15),
+ username: 'user1',
+ );
+
+ pictureDto2 = PictureDto(
+ id: 2,
+ comment: 'Second picture comment',
+ category: 'category2',
+ image: _testImage,
+ pictureDate: DateTime(2024, 2, 20),
+ username: 'user2',
+ );
+
+ pictureDto3 = PictureDto(
+ id: 3,
+ comment: null,
+ category: 'category3',
+ image: _testImage,
+ pictureDate: DateTime(2024, 3, 25),
+ username: 'user3',
+ );
+
+ customerDto = CustomerDto(
+ id: 1,
+ name: 'Test Apotheke',
+ customerNumber: 'CUST001',
+ pictures: [pictureDto1, pictureDto2, pictureDto3],
+ );
+ });
+
+ group('PictureWidget', () {
+ testWidgets('displays customer information correctly', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ PictureWidget(customerDto: customerDto, pictureDto: pictureDto1),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify that the header is displayed
+ expect(find.text('INFORMATIONEN'), findsOneWidget);
+
+ // Verify customer name is displayed
+ expect(find.text('Test Apotheke'), findsOneWidget);
+
+ // Verify customer number is displayed
+ expect(find.text('CUST001'), findsOneWidget);
+
+ // Verify labels are displayed
+ expect(find.text('APOTHEKE'), findsOneWidget);
+ expect(find.text('KUNDENNUMMER'), findsOneWidget);
+ expect(find.text('DATUM'), findsOneWidget);
+ expect(find.text('KOMMENTAR'), findsOneWidget);
+ });
+
+ testWidgets('displays picture comment', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ PictureWidget(customerDto: customerDto, pictureDto: pictureDto1),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify the comment is displayed
+ expect(find.text('First picture comment'), findsOneWidget);
+ });
+
+ testWidgets('displays empty string when comment is null', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ PictureWidget(customerDto: customerDto, pictureDto: pictureDto3),
+ );
+ await tester.pumpAndSettle();
+
+ // The comment field should be empty but the label should exist
+ expect(find.text('KOMMENTAR'), findsOneWidget);
+ });
+
+ testWidgets('shows close button', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ PictureWidget(customerDto: customerDto, pictureDto: pictureDto1),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify close button icon exists
+ expect(find.byIcon(Icons.close), findsOneWidget);
+ });
+
+ testWidgets('shows right navigation button when there are more pictures', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ PictureWidget(customerDto: customerDto, pictureDto: pictureDto1),
+ );
+ await tester.pumpAndSettle();
+
+ // First picture should have right navigation (chevron_right), no left navigation
+ expect(find.byIcon(Icons.chevron_right), findsOneWidget);
+ expect(find.byIcon(Icons.chevron_left), findsNothing);
+ });
+
+ testWidgets('shows left navigation button when not on first picture', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ PictureWidget(customerDto: customerDto, pictureDto: pictureDto2),
+ );
+ await tester.pumpAndSettle();
+
+ // Middle picture should have both navigation buttons
+ expect(find.byIcon(Icons.chevron_left), findsOneWidget);
+ expect(find.byIcon(Icons.chevron_right), findsOneWidget);
+ });
+
+ testWidgets('shows only left navigation on last picture', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ PictureWidget(customerDto: customerDto, pictureDto: pictureDto3),
+ );
+ await tester.pumpAndSettle();
+
+ // Last picture should have left navigation, no right navigation
+ expect(find.byIcon(Icons.chevron_left), findsOneWidget);
+ expect(find.byIcon(Icons.chevron_right), findsNothing);
+ });
+
+ testWidgets('navigates to next picture when right button is tapped', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ PictureWidget(customerDto: customerDto, pictureDto: pictureDto1),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify first picture comment is shown
+ expect(find.text('First picture comment'), findsOneWidget);
+
+ // Tap right navigation button
+ await tester.tap(find.byIcon(Icons.chevron_right));
+ await tester.pumpAndSettle();
+
+ // Verify second picture comment is now shown
+ expect(find.text('Second picture comment'), findsOneWidget);
+ expect(find.text('First picture comment'), findsNothing);
+ });
+
+ testWidgets('navigates to previous picture when left button is tapped', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ PictureWidget(customerDto: customerDto, pictureDto: pictureDto2),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify second picture comment is shown
+ expect(find.text('Second picture comment'), findsOneWidget);
+
+ // Tap left navigation button
+ await tester.tap(find.byIcon(Icons.chevron_left));
+ await tester.pumpAndSettle();
+
+ // Verify first picture comment is now shown
+ expect(find.text('First picture comment'), findsOneWidget);
+ expect(find.text('Second picture comment'), findsNothing);
+ });
+
+ testWidgets('shows no navigation buttons when only one picture', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ final singlePictureCustomer = CustomerDto(
+ id: 1,
+ name: 'Test Apotheke',
+ customerNumber: 'CUST001',
+ pictures: [pictureDto1],
+ );
+
+ await pumpApp(
+ tester,
+ PictureWidget(customerDto: singlePictureCustomer, pictureDto: pictureDto1),
+ );
+ await tester.pumpAndSettle();
+
+ // No navigation buttons should be shown
+ expect(find.byIcon(Icons.chevron_left), findsNothing);
+ expect(find.byIcon(Icons.chevron_right), findsNothing);
+ });
+
+ testWidgets('opens fullscreen dialog when image is tapped', (WidgetTester tester) async {
+ setScreenSize(tester, 2048, 2048);
+
+ await pumpApp(
+ tester,
+ PictureWidget(customerDto: customerDto, pictureDto: pictureDto1),
+ );
+ await tester.pumpAndSettle();
+
+ // Find the GestureDetector with the image key
+ final imageFinder = find.byKey(const Key("image"));
+ expect(imageFinder, findsOneWidget);
+
+ // Ensure the widget is visible first
+ await tester.ensureVisible(imageFinder);
+ await tester.pumpAndSettle();
+
+ // Tap the image - use warnIfMissed: false since the Image.memory may have
+ // rendering issues in test environment but the GestureDetector should still work
+ await tester.tap(imageFinder, warnIfMissed: false);
+ await tester.pumpAndSettle();
+
+ // Verify fullscreen dialog is shown
+ expect(find.byType(PictureFullscreenDialog), findsOneWidget);
+ });
+ });
+}
diff --git a/hartmann-foto-documentation-frontend/test/pages/ui_utils/general_error_widget_test.dart b/hartmann-foto-documentation-frontend/test/pages/ui_utils/general_error_widget_test.dart
new file mode 100644
index 0000000..816cf92
--- /dev/null
+++ b/hartmann-foto-documentation-frontend/test/pages/ui_utils/general_error_widget_test.dart
@@ -0,0 +1,211 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:fotodocumentation/controller/base_controller.dart';
+import 'package:fotodocumentation/pages/ui_utils/component/general_error_widget.dart';
+import 'package:fotodocumentation/utils/di_container.dart';
+import 'package:fotodocumentation/utils/login_credentials.dart';
+
+import '../../testing/test_utils.dart';
+
+void main() {
+ TestWidgetsFlutterBinding.ensureInitialized();
+ DiContainer.instance.initState();
+ DiContainer.instance.put(LoginCredentials, getDefaultLoginCredentials());
+
+ group('GeneralErrorWidget', () {
+ testWidgets('displays error icon', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ const GeneralErrorWidget(error: 'Test error'),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify error icon is displayed
+ expect(find.byIcon(Icons.error_outline), findsOneWidget);
+ });
+
+ testWidgets('displays error message with error text', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ const GeneralErrorWidget(error: 'Something went wrong'),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify error message is displayed (German localization: "Fehler: {name}")
+ expect(find.text('Fehler: Something went wrong'), findsOneWidget);
+ });
+
+ testWidgets('displays status code message when statusCode is provided', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ const GeneralErrorWidget(error: '', statusCode: 404),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify status code message is displayed (German localization: "Statuscode {statusCode}")
+ expect(find.text('Statuscode 404'), findsOneWidget);
+ });
+
+ testWidgets('displays status code message for 500 error', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ const GeneralErrorWidget(error: '', statusCode: 500),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify status code message is displayed
+ expect(find.text('Statuscode 500'), findsOneWidget);
+ });
+
+ testWidgets('does not display retry button when reload is null', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ const GeneralErrorWidget(error: 'Test error'),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify retry button is not displayed
+ expect(find.byType(ElevatedButton), findsNothing);
+ expect(find.text('Wiederholen'), findsNothing);
+ });
+
+ testWidgets('displays retry button when reload is provided', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ GeneralErrorWidget(error: 'Test error', reload: () {}),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify retry button is displayed (German localization: "Wiederholen")
+ expect(find.byType(ElevatedButton), findsOneWidget);
+ expect(find.text('Wiederholen'), findsOneWidget);
+ });
+
+ testWidgets('calls reload callback when retry button is tapped', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ bool reloadCalled = false;
+
+ await pumpApp(
+ tester,
+ GeneralErrorWidget(
+ error: 'Test error',
+ reload: () {
+ reloadCalled = true;
+ },
+ ),
+ );
+ await tester.pumpAndSettle();
+
+ // Tap retry button
+ await tester.tap(find.byType(ElevatedButton));
+ await tester.pumpAndSettle();
+
+ // Verify reload was called
+ expect(reloadCalled, isTrue);
+ });
+
+ testWidgets('fromServerError factory creates widget with status code', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ final serverError = ServerError(403);
+
+ await pumpApp(
+ tester,
+ GeneralErrorWidget.fromServerError(serverError),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify status code message is displayed
+ expect(find.text('Statuscode 403'), findsOneWidget);
+ });
+
+ testWidgets('fromServerError factory with reload callback', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ bool reloadCalled = false;
+ final serverError = ServerError(401);
+
+ await pumpApp(
+ tester,
+ GeneralErrorWidget.fromServerError(
+ serverError,
+ reload: () {
+ reloadCalled = true;
+ },
+ ),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify status code is displayed
+ expect(find.text('Statuscode 401'), findsOneWidget);
+
+ // Verify retry button is displayed and functional
+ expect(find.text('Wiederholen'), findsOneWidget);
+ await tester.tap(find.byType(ElevatedButton));
+ await tester.pumpAndSettle();
+
+ expect(reloadCalled, isTrue);
+ });
+
+ testWidgets('widget renders correctly', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ const GeneralErrorWidget(error: 'Test error'),
+ );
+ await tester.pumpAndSettle();
+
+ // Verify GeneralErrorWidget is rendered
+ expect(find.byType(GeneralErrorWidget), findsOneWidget);
+
+ // Verify it contains a Column for layout
+ final columnFinder = find.descendant(
+ of: find.byType(GeneralErrorWidget),
+ matching: find.byType(Column),
+ );
+ expect(columnFinder, findsOneWidget);
+ });
+
+ testWidgets('error icon has correct color', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ const GeneralErrorWidget(error: 'Test error'),
+ );
+ await tester.pumpAndSettle();
+
+ // Find the Icon widget and verify its color
+ final icon = tester.widget(find.byIcon(Icons.error_outline));
+ expect(icon.color, equals(Colors.red[300]));
+ });
+
+ testWidgets('error icon has correct size', (WidgetTester tester) async {
+ setScreenSize(tester, 1024, 1024);
+
+ await pumpApp(
+ tester,
+ const GeneralErrorWidget(error: 'Test error'),
+ );
+ await tester.pumpAndSettle();
+
+ // Find the Icon widget and verify its size
+ final icon = tester.widget(find.byIcon(Icons.error_outline));
+ expect(icon.size, equals(60));
+ });
+ });
+}
diff --git a/hartmann-foto-documentation-frontend/test/testing/test_utils.dart b/hartmann-foto-documentation-frontend/test/testing/test_utils.dart
index 45852bc..20f3956 100644
--- a/hartmann-foto-documentation-frontend/test/testing/test_utils.dart
+++ b/hartmann-foto-documentation-frontend/test/testing/test_utils.dart
@@ -1,14 +1,17 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
-import 'package:fotodocumentation/controller/customer_controller.dart';
+import 'package:flutter_localizations/flutter_localizations.dart';
+
import 'package:http/http.dart' as http;
import 'package:mockito/annotations.dart';
+import 'package:mockito/mockito.dart';
+
+import 'package:fotodocumentation/controller/customer_controller.dart';
+import 'package:fotodocumentation/controller/login_controller.dart';
+import 'package:fotodocumentation/controller/picture_controller.dart';
import 'package:fotodocumentation/l10n/app_localizations.dart';
-import 'package:fotodocumentation/pages/ui_utils/dialog/snackbar_utils.dart';
-import 'package:fotodocumentation/pages/ui_utils/header_utils.dart';
import 'package:fotodocumentation/utils/login_credentials.dart';
import 'package:fotodocumentation/utils/jwt_token_storage.dart';
-import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:fotodocumentation/utils/global_router.dart';
import 'test_utils.mocks.dart';
@@ -20,6 +23,7 @@ void setScreenSize(WidgetTester tester, int width, int height) {
MockLoginCredentials getDefaultLoginCredentials() {
var mockLoginCredentials = MockLoginCredentials();
+ when(mockLoginCredentials.isLoggedIn).thenReturn(true);
return mockLoginCredentials;
}
@@ -58,9 +62,9 @@ Future pumpAppConfig(WidgetTester tester, String initialLocation) async {
// dart run build_runner build
@GenerateMocks([
LoginCredentials,
+ LoginController,
CustomerController,
- HeaderUtils,
- SnackbarUtils,
+ PictureController,
JwtTokenStorage,
http.Client,
])
diff --git a/hartmann-foto-documentation-frontend/test/testing/test_utils.mocks.dart b/hartmann-foto-documentation-frontend/test/testing/test_utils.mocks.dart
index b8cff77..85127f7 100644
--- a/hartmann-foto-documentation-frontend/test/testing/test_utils.mocks.dart
+++ b/hartmann-foto-documentation-frontend/test/testing/test_utils.mocks.dart
@@ -3,20 +3,22 @@
// Do not manually edit this file.
// ignore_for_file: no_leading_underscores_for_library_prefixes
-import 'dart:async' as _i11;
-import 'dart:convert' as _i12;
-import 'dart:typed_data' as _i13;
-import 'dart:ui' as _i6;
+import 'dart:async' as _i7;
+import 'dart:convert' as _i14;
+import 'dart:typed_data' as _i15;
+import 'dart:ui' as _i5;
-import 'package:flutter/material.dart' as _i2;
-import 'package:fotodocumentation/pages/ui_utils/dialog/snackbar_utils.dart'
- as _i9;
-import 'package:fotodocumentation/pages/ui_utils/header_utils.dart' as _i7;
-import 'package:fotodocumentation/utils/jwt_token_storage.dart' as _i10;
-import 'package:fotodocumentation/utils/login_credentials.dart' as _i4;
-import 'package:http/http.dart' as _i3;
+import 'package:fotodocumentation/controller/customer_controller.dart' as _i9;
+import 'package:fotodocumentation/controller/login_controller.dart' as _i6;
+import 'package:fotodocumentation/controller/picture_controller.dart' as _i11;
+import 'package:fotodocumentation/dto/customer_dto.dart' as _i10;
+import 'package:fotodocumentation/dto/jwt_token_pair_dto.dart' as _i8;
+import 'package:fotodocumentation/dto/picture_dto.dart' as _i12;
+import 'package:fotodocumentation/utils/jwt_token_storage.dart' as _i13;
+import 'package:fotodocumentation/utils/login_credentials.dart' as _i3;
+import 'package:http/http.dart' as _i2;
import 'package:mockito/mockito.dart' as _i1;
-import 'package:mockito/src/dummies.dart' as _i5;
+import 'package:mockito/src/dummies.dart' as _i4;
// ignore_for_file: type=lint
// ignore_for_file: avoid_redundant_argument_values
@@ -33,22 +35,8 @@ import 'package:mockito/src/dummies.dart' as _i5;
// ignore_for_file: subtype_of_sealed_class
// ignore_for_file: invalid_use_of_internal_member
-class _FakeWidget_0 extends _i1.SmartFake implements _i2.Widget {
- _FakeWidget_0(
- Object parent,
- Invocation parentInvocation,
- ) : super(
- parent,
- parentInvocation,
- );
-
- @override
- String toString({_i2.DiagnosticLevel? minLevel = _i2.DiagnosticLevel.info}) =>
- super.toString();
-}
-
-class _FakeResponse_1 extends _i1.SmartFake implements _i3.Response {
- _FakeResponse_1(
+class _FakeResponse_0 extends _i1.SmartFake implements _i2.Response {
+ _FakeResponse_0(
Object parent,
Invocation parentInvocation,
) : super(
@@ -57,9 +45,9 @@ class _FakeResponse_1 extends _i1.SmartFake implements _i3.Response {
);
}
-class _FakeStreamedResponse_2 extends _i1.SmartFake
- implements _i3.StreamedResponse {
- _FakeStreamedResponse_2(
+class _FakeStreamedResponse_1 extends _i1.SmartFake
+ implements _i2.StreamedResponse {
+ _FakeStreamedResponse_1(
Object parent,
Invocation parentInvocation,
) : super(
@@ -71,7 +59,7 @@ class _FakeStreamedResponse_2 extends _i1.SmartFake
/// A class which mocks [LoginCredentials].
///
/// See the documentation for Mockito's code generation for more information.
-class MockLoginCredentials extends _i1.Mock implements _i4.LoginCredentials {
+class MockLoginCredentials extends _i1.Mock implements _i3.LoginCredentials {
MockLoginCredentials() {
_i1.throwOnMissingStub(this);
}
@@ -79,18 +67,33 @@ class MockLoginCredentials extends _i1.Mock implements _i4.LoginCredentials {
@override
String get fullname => (super.noSuchMethod(
Invocation.getter(#fullname),
- returnValue: _i5.dummyValue(
+ returnValue: _i4.dummyValue(
this,
Invocation.getter(#fullname),
),
) as String);
+ @override
+ bool get isLoggedIn => (super.noSuchMethod(
+ Invocation.getter(#isLoggedIn),
+ returnValue: false,
+ ) as bool);
+
@override
bool get hasListeners => (super.noSuchMethod(
Invocation.getter(#hasListeners),
returnValue: false,
) as bool);
+ @override
+ void setLoggedIn(bool? loggedIn) => super.noSuchMethod(
+ Invocation.method(
+ #setLoggedIn,
+ [loggedIn],
+ ),
+ returnValueForMissingStub: null,
+ );
+
@override
void logout() => super.noSuchMethod(
Invocation.method(
@@ -101,7 +104,7 @@ class MockLoginCredentials extends _i1.Mock implements _i4.LoginCredentials {
);
@override
- void addListener(_i6.VoidCallback? listener) => super.noSuchMethod(
+ void addListener(_i5.VoidCallback? listener) => super.noSuchMethod(
Invocation.method(
#addListener,
[listener],
@@ -110,7 +113,7 @@ class MockLoginCredentials extends _i1.Mock implements _i4.LoginCredentials {
);
@override
- void removeListener(_i6.VoidCallback? listener) => super.noSuchMethod(
+ void removeListener(_i5.VoidCallback? listener) => super.noSuchMethod(
Invocation.method(
#removeListener,
[listener],
@@ -137,85 +140,115 @@ class MockLoginCredentials extends _i1.Mock implements _i4.LoginCredentials {
);
}
-/// A class which mocks [HeaderUtils].
+/// A class which mocks [LoginController].
///
/// See the documentation for Mockito's code generation for more information.
-class MockHeaderUtils extends _i1.Mock implements _i7.HeaderUtils {
- MockHeaderUtils() {
+class MockLoginController extends _i1.Mock implements _i6.LoginController {
+ MockLoginController() {
_i1.throwOnMissingStub(this);
}
@override
- _i2.Widget titleWidget(String? text) => (super.noSuchMethod(
+ _i7.Future<({_i8.JwtTokenPairDto? jwtTokenPairDto})> authenticate(
+ String? username,
+ String? password,
+ ) =>
+ (super.noSuchMethod(
Invocation.method(
- #titleWidget,
- [text],
+ #authenticate,
+ [
+ username,
+ password,
+ ],
),
- returnValue: _FakeWidget_0(
- this,
- Invocation.method(
- #titleWidget,
- [text],
- ),
+ returnValue: _i7.Future<({_i8.JwtTokenPairDto? jwtTokenPairDto})>.value(
+ (jwtTokenPairDto: null)),
+ ) as _i7.Future<({_i8.JwtTokenPairDto? jwtTokenPairDto})>);
+
+ @override
+ _i7.Future refreshAccessToken() => (super.noSuchMethod(
+ Invocation.method(
+ #refreshAccessToken,
+ [],
),
- ) as _i2.Widget);
+ returnValue: _i7.Future.value(false),
+ ) as _i7.Future);
+
+ @override
+ _i7.Future isUsingJwtAuth() => (super.noSuchMethod(
+ Invocation.method(
+ #isUsingJwtAuth,
+ [],
+ ),
+ returnValue: _i7.Future.value(false),
+ ) as _i7.Future);
}
-/// A class which mocks [SnackbarUtils].
+/// A class which mocks [CustomerController].
///
/// See the documentation for Mockito's code generation for more information.
-class MockSnackbarUtils extends _i1.Mock implements _i9.SnackbarUtils {
- MockSnackbarUtils() {
+class MockCustomerController extends _i1.Mock
+ implements _i9.CustomerController {
+ MockCustomerController() {
_i1.throwOnMissingStub(this);
}
@override
- void showSnackbar(
- _i2.BuildContext? context,
- String? msg,
- bool? warning,
+ _i7.Future> getAll(
+ String? query,
+ String? startsWith,
) =>
- super.noSuchMethod(
+ (super.noSuchMethod(
Invocation.method(
- #showSnackbar,
+ #getAll,
[
- context,
- msg,
- warning,
+ query,
+ startsWith,
],
),
- returnValueForMissingStub: null,
- );
+ returnValue: _i7.Future>.value(
+ <_i10.CustomerListDto>[]),
+ ) as _i7.Future>);
@override
- void showSnackbarPopup(
- _i2.BuildContext? context,
- String? msg,
- bool? warning,
- ) =>
- super.noSuchMethod(
+ _i7.Future<_i10.CustomerDto?> get({required int? id}) => (super.noSuchMethod(
Invocation.method(
- #showSnackbarPopup,
- [
- context,
- msg,
- warning,
- ],
+ #get,
+ [],
+ {#id: id},
),
- returnValueForMissingStub: null,
- );
+ returnValue: _i7.Future<_i10.CustomerDto?>.value(),
+ ) as _i7.Future<_i10.CustomerDto?>);
+}
+
+/// A class which mocks [PictureController].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockPictureController extends _i1.Mock implements _i11.PictureController {
+ MockPictureController() {
+ _i1.throwOnMissingStub(this);
+ }
+
+ @override
+ _i7.Future delete(_i12.PictureDto? dto) => (super.noSuchMethod(
+ Invocation.method(
+ #delete,
+ [dto],
+ ),
+ returnValue: _i7.Future.value(false),
+ ) as _i7.Future);
}
/// A class which mocks [JwtTokenStorage].
///
/// See the documentation for Mockito's code generation for more information.
-class MockJwtTokenStorage extends _i1.Mock implements _i10.JwtTokenStorage {
+class MockJwtTokenStorage extends _i1.Mock implements _i13.JwtTokenStorage {
MockJwtTokenStorage() {
_i1.throwOnMissingStub(this);
}
@override
- _i11.Future saveTokens(
+ _i7.Future saveTokens(
String? accessToken,
String? refreshToken,
) =>
@@ -227,69 +260,69 @@ class MockJwtTokenStorage extends _i1.Mock implements _i10.JwtTokenStorage {
refreshToken,
],
),
- returnValue: _i11.Future.value(),
- returnValueForMissingStub: _i11.Future.value(),
- ) as _i11.Future);
+ returnValue: _i7.Future.value(),
+ returnValueForMissingStub: _i7.Future.value(),
+ ) as _i7.Future);
@override
- _i11.Future getAccessToken() => (super.noSuchMethod(
+ _i7.Future getAccessToken() => (super.noSuchMethod(
Invocation.method(
#getAccessToken,
[],
),
- returnValue: _i11.Future.value(),
- ) as _i11.Future);
+ returnValue: _i7.Future.value(),
+ ) as _i7.Future);
@override
- _i11.Future getRefreshToken() => (super.noSuchMethod(
+ _i7.Future getRefreshToken() => (super.noSuchMethod(
Invocation.method(
#getRefreshToken,
[],
),
- returnValue: _i11.Future.value(),
- ) as _i11.Future);
+ returnValue: _i7.Future.value(),
+ ) as _i7.Future);
@override
- _i11.Future clearTokens() => (super.noSuchMethod(
+ _i7.Future clearTokens() => (super.noSuchMethod(
Invocation.method(
#clearTokens,
[],
),
- returnValue: _i11.Future.value(),
- returnValueForMissingStub: _i11.Future.value(),
- ) as _i11.Future);
+ returnValue: _i7.Future.value(),
+ returnValueForMissingStub: _i7.Future.value(),
+ ) as _i7.Future);
@override
- _i11.Future hasTokens() => (super.noSuchMethod(
+ _i7.Future hasTokens() => (super.noSuchMethod(
Invocation.method(
#hasTokens,
[],
),
- returnValue: _i11.Future.value(false),
- ) as _i11.Future);
+ returnValue: _i7.Future.value(false),
+ ) as _i7.Future);
@override
- _i11.Future updateAccessToken(String? accessToken) =>
+ _i7.Future updateAccessToken(String? accessToken) =>
(super.noSuchMethod(
Invocation.method(
#updateAccessToken,
[accessToken],
),
- returnValue: _i11.Future.value(),
- returnValueForMissingStub: _i11.Future.value(),
- ) as _i11.Future);
+ returnValue: _i7.Future.value(),
+ returnValueForMissingStub: _i7.Future.value(),
+ ) as _i7.Future);
}
/// A class which mocks [Client].
///
/// See the documentation for Mockito's code generation for more information.
-class MockClient extends _i1.Mock implements _i3.Client {
+class MockClient extends _i1.Mock implements _i2.Client {
MockClient() {
_i1.throwOnMissingStub(this);
}
@override
- _i11.Future<_i3.Response> head(
+ _i7.Future<_i2.Response> head(
Uri? url, {
Map? headers,
}) =>
@@ -299,7 +332,7 @@ class MockClient extends _i1.Mock implements _i3.Client {
[url],
{#headers: headers},
),
- returnValue: _i11.Future<_i3.Response>.value(_FakeResponse_1(
+ returnValue: _i7.Future<_i2.Response>.value(_FakeResponse_0(
this,
Invocation.method(
#head,
@@ -307,10 +340,10 @@ class MockClient extends _i1.Mock implements _i3.Client {
{#headers: headers},
),
)),
- ) as _i11.Future<_i3.Response>);
+ ) as _i7.Future<_i2.Response>);
@override
- _i11.Future<_i3.Response> get(
+ _i7.Future<_i2.Response> get(
Uri? url, {
Map? headers,
}) =>
@@ -320,7 +353,7 @@ class MockClient extends _i1.Mock implements _i3.Client {
[url],
{#headers: headers},
),
- returnValue: _i11.Future<_i3.Response>.value(_FakeResponse_1(
+ returnValue: _i7.Future<_i2.Response>.value(_FakeResponse_0(
this,
Invocation.method(
#get,
@@ -328,14 +361,14 @@ class MockClient extends _i1.Mock implements _i3.Client {
{#headers: headers},
),
)),
- ) as _i11.Future<_i3.Response>);
+ ) as _i7.Future<_i2.Response>);
@override
- _i11.Future<_i3.Response> post(
+ _i7.Future<_i2.Response> post(
Uri? url, {
Map? headers,
Object? body,
- _i12.Encoding? encoding,
+ _i14.Encoding? encoding,
}) =>
(super.noSuchMethod(
Invocation.method(
@@ -347,7 +380,7 @@ class MockClient extends _i1.Mock implements _i3.Client {
#encoding: encoding,
},
),
- returnValue: _i11.Future<_i3.Response>.value(_FakeResponse_1(
+ returnValue: _i7.Future<_i2.Response>.value(_FakeResponse_0(
this,
Invocation.method(
#post,
@@ -359,14 +392,14 @@ class MockClient extends _i1.Mock implements _i3.Client {
},
),
)),
- ) as _i11.Future<_i3.Response>);
+ ) as _i7.Future<_i2.Response>);
@override
- _i11.Future<_i3.Response> put(
+ _i7.Future<_i2.Response> put(
Uri? url, {
Map? headers,
Object? body,
- _i12.Encoding? encoding,
+ _i14.Encoding? encoding,
}) =>
(super.noSuchMethod(
Invocation.method(
@@ -378,7 +411,7 @@ class MockClient extends _i1.Mock implements _i3.Client {
#encoding: encoding,
},
),
- returnValue: _i11.Future<_i3.Response>.value(_FakeResponse_1(
+ returnValue: _i7.Future<_i2.Response>.value(_FakeResponse_0(
this,
Invocation.method(
#put,
@@ -390,14 +423,14 @@ class MockClient extends _i1.Mock implements _i3.Client {
},
),
)),
- ) as _i11.Future<_i3.Response>);
+ ) as _i7.Future<_i2.Response>);
@override
- _i11.Future<_i3.Response> patch(
+ _i7.Future<_i2.Response> patch(
Uri? url, {
Map? headers,
Object? body,
- _i12.Encoding? encoding,
+ _i14.Encoding? encoding,
}) =>
(super.noSuchMethod(
Invocation.method(
@@ -409,7 +442,7 @@ class MockClient extends _i1.Mock implements _i3.Client {
#encoding: encoding,
},
),
- returnValue: _i11.Future<_i3.Response>.value(_FakeResponse_1(
+ returnValue: _i7.Future<_i2.Response>.value(_FakeResponse_0(
this,
Invocation.method(
#patch,
@@ -421,14 +454,14 @@ class MockClient extends _i1.Mock implements _i3.Client {
},
),
)),
- ) as _i11.Future<_i3.Response>);
+ ) as _i7.Future<_i2.Response>);
@override
- _i11.Future<_i3.Response> delete(
+ _i7.Future<_i2.Response> delete(
Uri? url, {
Map? headers,
Object? body,
- _i12.Encoding? encoding,
+ _i14.Encoding? encoding,
}) =>
(super.noSuchMethod(
Invocation.method(
@@ -440,7 +473,7 @@ class MockClient extends _i1.Mock implements _i3.Client {
#encoding: encoding,
},
),
- returnValue: _i11.Future<_i3.Response>.value(_FakeResponse_1(
+ returnValue: _i7.Future<_i2.Response>.value(_FakeResponse_0(
this,
Invocation.method(
#delete,
@@ -452,10 +485,10 @@ class MockClient extends _i1.Mock implements _i3.Client {
},
),
)),
- ) as _i11.Future<_i3.Response>);
+ ) as _i7.Future<_i2.Response>);
@override
- _i11.Future read(
+ _i7.Future read(
Uri? url, {
Map? headers,
}) =>
@@ -465,7 +498,7 @@ class MockClient extends _i1.Mock implements _i3.Client {
[url],
{#headers: headers},
),
- returnValue: _i11.Future.value(_i5.dummyValue(
+ returnValue: _i7.Future.value(_i4.dummyValue(
this,
Invocation.method(
#read,
@@ -473,10 +506,10 @@ class MockClient extends _i1.Mock implements _i3.Client {
{#headers: headers},
),
)),
- ) as _i11.Future);
+ ) as _i7.Future);
@override
- _i11.Future<_i13.Uint8List> readBytes(
+ _i7.Future<_i15.Uint8List> readBytes(
Uri? url, {
Map? headers,
}) =>
@@ -486,25 +519,25 @@ class MockClient extends _i1.Mock implements _i3.Client {
[url],
{#headers: headers},
),
- returnValue: _i11.Future<_i13.Uint8List>.value(_i13.Uint8List(0)),
- ) as _i11.Future<_i13.Uint8List>);
+ returnValue: _i7.Future<_i15.Uint8List>.value(_i15.Uint8List(0)),
+ ) as _i7.Future<_i15.Uint8List>);
@override
- _i11.Future<_i3.StreamedResponse> send(_i3.BaseRequest? request) =>
+ _i7.Future<_i2.StreamedResponse> send(_i2.BaseRequest? request) =>
(super.noSuchMethod(
Invocation.method(
#send,
[request],
),
returnValue:
- _i11.Future<_i3.StreamedResponse>.value(_FakeStreamedResponse_2(
+ _i7.Future<_i2.StreamedResponse>.value(_FakeStreamedResponse_1(
this,
Invocation.method(
#send,
[request],
),
)),
- ) as _i11.Future<_i3.StreamedResponse>);
+ ) as _i7.Future<_i2.StreamedResponse>);
@override
void close() => super.noSuchMethod(