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 de7b344a71ef2ea1874a55ef8f4bee02592f4e2a..a1bf4dc8f02c0ecce2efd7be84e25b74cd7004c1 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 11459e7a474a80d80823df6f7945661ddd3b0416..d7aa65b6ecb7546f5a70a42555e417124dcd8a46 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 df8ea4ff0e9ed34e051c28903e2ab78476f99f62..3cde1320d243fb4191cb5d7b7ef54447cc8d2774 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 6f0d5f1d6744d4c813b16e7a4e0285577a34f112..c3fcc2884cdf15e25ec77559d394ab01b088f613 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 5eeac12fb8fda7f6ca0cdeceb3f74c6171acdace..f46eafb7f7832577f64ffe395dab72158741bea2 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 5e3c7ab6886cf791a36976a18e56776d0d4f56a9..db31c9ee8a14ce97b014ee3ac1edfce64c311f6a 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