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