From 5298233edcb73dfff94a91b22a455ac08d461b60 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Sat, 21 Sep 2024 10:26:59 +0200
Subject: [PATCH] OZG-3539 OZG-6785 extend controller to new settings

---
 .../user/settings/UserSettingsResource.java   |  6 +--
 .../user/settings/UserSettingsService.java    |  5 +-
 .../settings/UserSettingsResourceTest.java    |  4 +-
 .../settings/UserSettingsServiceITCase.java   |  2 +-
 .../settings/UserSettingsServiceTest.java     | 49 ++++++++++++++++++-
 .../settings/UserSettingsTestFactory.java     | 10 +++-
 6 files changed, 65 insertions(+), 11 deletions(-)

diff --git a/user-manager-server/src/main/java/de/ozgcloud/user/settings/UserSettingsResource.java b/user-manager-server/src/main/java/de/ozgcloud/user/settings/UserSettingsResource.java
index de7b344a..a1bf4dc8 100644
--- a/user-manager-server/src/main/java/de/ozgcloud/user/settings/UserSettingsResource.java
+++ b/user-manager-server/src/main/java/de/ozgcloud/user/settings/UserSettingsResource.java
@@ -25,8 +25,6 @@ package de.ozgcloud.user.settings;
 
 import java.util.Objects;
 
-import de.ozgcloud.user.common.errorhandling.AccessForbiddenException;
-import de.ozgcloud.user.common.errorhandling.FunctionalException;
 import jakarta.inject.Inject;
 import jakarta.ws.rs.GET;
 import jakarta.ws.rs.PATCH;
@@ -43,6 +41,8 @@ import org.jboss.resteasy.reactive.common.util.RestMediaType;
 
 import de.ozgcloud.user.User;
 import de.ozgcloud.user.UserService;
+import de.ozgcloud.user.common.errorhandling.AccessForbiddenException;
+import de.ozgcloud.user.common.errorhandling.FunctionalException;
 import io.quarkus.hal.HalEntityWrapper;
 
 @Path(UserSettingsResource.USER_PATH)
@@ -86,7 +86,7 @@ public class UserSettingsResource {
 			throw new FunctionalException(() -> "Request Body missing.");
 		}
 
-		return userSettingsService.updateByUserId(userSettings, userId)
+		return userSettingsService.updateByUserId(userId, userSettings)
 				.map(updatedSettings -> resourceAssembler.toResource(updatedSettings, userId, userManagerUrl))
 				.orElseThrow(() -> new FunctionalException(() -> "Invalid user id"));
 	}
diff --git a/user-manager-server/src/main/java/de/ozgcloud/user/settings/UserSettingsService.java b/user-manager-server/src/main/java/de/ozgcloud/user/settings/UserSettingsService.java
index 11459e7a..d7aa65b6 100644
--- a/user-manager-server/src/main/java/de/ozgcloud/user/settings/UserSettingsService.java
+++ b/user-manager-server/src/main/java/de/ozgcloud/user/settings/UserSettingsService.java
@@ -40,8 +40,9 @@ class UserSettingsService {
 	@Inject
 	UserSettingsRepository repository;
 
-	public Optional<UserSettings> updateByUserId(UserSettings userSettings, String userId) {
-		return repository.updateByUserId(userId, userSettings);
+	public Optional<UserSettings> updateByUserId(String userId, UserSettings newSettings) {
+		var settings = newSettings.toBuilder().vorgangCreated(newSettings.getNotificationsSendFor() == NotificationsSendFor.ALL).build();
+		return repository.updateByUserId(userId, settings);
 	}
 
 	public UserSettings getByUserId(String userId) {
diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsResourceTest.java b/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsResourceTest.java
index df8ea4ff..3cde1320 100644
--- a/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsResourceTest.java
+++ b/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsResourceTest.java
@@ -168,7 +168,7 @@ class UserSettingsResourceTest {
 			@BeforeEach
 			void mockAccess() {
 				doNothing().when(resource).checkUserAccess(anyString());
-				when(userSettingsService.updateByUserId(any(UserSettings.class), anyString())).thenReturn(Optional.of(updatedUserSettings));
+				when(userSettingsService.updateByUserId(anyString(), any(UserSettings.class))).thenReturn(Optional.of(updatedUserSettings));
 			}
 
 			@Test
@@ -184,7 +184,7 @@ class UserSettingsResourceTest {
 				when(resourceAssembler.toResource(any(), anyString(), anyString())).thenReturn(new HalEntityWrapper(null));
 				resource.updateUserSettings(USER_ID, userSettings);
 
-				verify(userSettingsService).updateByUserId(userSettings, USER_ID);
+				verify(userSettingsService).updateByUserId(USER_ID, userSettings);
 			}
 
 			@Test
diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsServiceITCase.java b/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsServiceITCase.java
index 6f0d5f1d..c3fcc288 100644
--- a/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsServiceITCase.java
+++ b/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsServiceITCase.java
@@ -66,7 +66,7 @@ class UserSettingsServiceITCase {
 					.notificationsSendFor(NotificationsSendFor.ALL)
 					.build();
 
-			var savedUserSettings = service.updateByUserId(userSettingsToSave, UserTestFactory.ID.toHexString());
+			var savedUserSettings = service.updateByUserId(UserTestFactory.ID.toHexString(), userSettingsToSave);
 
 			assertThat(savedUserSettings)
 					.isPresent()
diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsServiceTest.java b/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsServiceTest.java
index 5eeac12f..f46eafb7 100644
--- a/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsServiceTest.java
+++ b/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsServiceTest.java
@@ -33,6 +33,8 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
@@ -56,11 +58,54 @@ class UserSettingsServiceTest {
 		private final UserSettings userSettings = UserSettingsTestFactory.create();
 		private final String userId = UUID.randomUUID().toString();
 
+		@Captor
+		private ArgumentCaptor<UserSettings> userSettingsArgumentCaptor;
+
 		@Test
 		void shouldCallRepository() {
-			service.updateByUserId(userSettings, userId);
+			service.updateByUserId(userId, userSettings);
+
+			verify(repository).updateByUserId(eq(userId), any(UserSettings.class));
+		}
 
-			verify(repository).updateByUserId(userId, userSettings);
+		@Test
+		void shouldSetVorgangCreated() {
+			service.updateByUserId(userId, userSettings.toBuilder().notificationsSendFor(NotificationsSendFor.ALL).vorgangCreated(false).build());
+
+			verify(repository).updateByUserId(eq(userId), userSettingsArgumentCaptor.capture());
+			assertThat(userSettingsArgumentCaptor.getValue())
+					.extracting(
+							UserSettings::getNotificationsSendFor,
+							UserSettings::isVorgangCreated,
+							UserSettings::isVorgangAssignedToUser,
+							UserSettings::isPostfachNachrichtFromAntragsteller,
+							UserSettings::isWiedervorlageOverdue)
+					.containsExactly(
+							NotificationsSendFor.ALL,
+							true,
+							UserSettingsTestFactory.VORGANG_ASSIGNED_TO_USER,
+							UserSettingsTestFactory.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER,
+							UserSettingsTestFactory.WIEDERVORLAGE_OVERDUE);
+		}
+
+		@Test
+		void shouldUnsetVorgangCreated() {
+			service.updateByUserId(userId, userSettings.toBuilder().notificationsSendFor(NotificationsSendFor.NONE).vorgangCreated(true).build());
+
+			verify(repository).updateByUserId(eq(userId), userSettingsArgumentCaptor.capture());
+			assertThat(userSettingsArgumentCaptor.getValue())
+					.extracting(
+							UserSettings::getNotificationsSendFor,
+							UserSettings::isVorgangCreated,
+							UserSettings::isVorgangAssignedToUser,
+							UserSettings::isPostfachNachrichtFromAntragsteller,
+							UserSettings::isWiedervorlageOverdue)
+					.containsExactly(
+							NotificationsSendFor.NONE,
+							false,
+							UserSettingsTestFactory.VORGANG_ASSIGNED_TO_USER,
+							UserSettingsTestFactory.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER,
+							UserSettingsTestFactory.WIEDERVORLAGE_OVERDUE);
 		}
 	}
 
diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsTestFactory.java b/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsTestFactory.java
index 5e3c7ab6..db31c9ee 100644
--- a/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsTestFactory.java
+++ b/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsTestFactory.java
@@ -26,6 +26,10 @@ package de.ozgcloud.user.settings;
 public class UserSettingsTestFactory {
 
 	public static final NotificationsSendFor NOTIFICATIONS_SEND_FOR = NotificationsSendFor.NONE;
+	public static final boolean VORGANG_CREATED = false;
+	public static final boolean VORGANG_ASSIGNED_TO_USER = true;
+	public static final boolean POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER = true;
+	public static final boolean WIEDERVORLAGE_OVERDUE = true;
 
 	public static UserSettings create() {
 		return createBuilder().build();
@@ -33,6 +37,10 @@ public class UserSettingsTestFactory {
 
 	public static UserSettings.UserSettingsBuilder createBuilder() {
 		return UserSettings.builder()
-				.notificationsSendFor(NOTIFICATIONS_SEND_FOR);
+				.notificationsSendFor(NOTIFICATIONS_SEND_FOR)
+				.vorgangCreated(VORGANG_CREATED)
+				.vorgangAssignedToUser(VORGANG_ASSIGNED_TO_USER)
+				.postfachNachrichtFromAntragsteller(POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER)
+				.wiedervorlageOverdue(WIEDERVORLAGE_OVERDUE);
 	}
 }
\ No newline at end of file
-- 
GitLab