diff --git a/user-manager-server/src/main/java/de/ozgcloud/user/UserService.java b/user-manager-server/src/main/java/de/ozgcloud/user/UserService.java index deab57205f2d89612c0bbe2b5d8f5f71f69a02d4..27edabcc7dc9d0d1e2be4c549065298f1c4eca3e 100644 --- a/user-manager-server/src/main/java/de/ozgcloud/user/UserService.java +++ b/user-manager-server/src/main/java/de/ozgcloud/user/UserService.java @@ -23,19 +23,22 @@ */ package de.ozgcloud.user; +import java.util.Objects; import java.util.Optional; import java.util.stream.Stream; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + import org.apache.commons.lang3.StringUtils; import de.ozgcloud.common.logging.OzgCloudLogging; import de.ozgcloud.user.common.errorhandling.ResourceNotFoundException; import de.ozgcloud.user.common.errorhandling.TechnicalException; import de.ozgcloud.user.keycloak.KeycloakUserRemoteService; +import de.ozgcloud.user.settings.UserSettings; import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.infrastructure.Infrastructure; -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; @ApplicationScoped @OzgCloudLogging @@ -48,10 +51,17 @@ public class UserService { public User save(User user) { findUser(user).ifPresentOrElse(persistedUser -> repository.updateUser(addIdUser(user, persistedUser)), - () -> repository.persist(user)); + () -> saveNewUser(user)); return repository.refresh(user); } + void saveNewUser(User user) { + if (Objects.isNull(user.getUserSettings())) { + user.setUserSettings(UserSettings.createDefault()); + } + repository.persist(user); + } + public Stream<User> findUsers(FindUserProfilesQuery query) { return repository.findUsers(query.getSearchBy(), query.getLimit()); } @@ -79,8 +89,7 @@ public class UserService { } private Optional<User> findUser(User user) { - return repository.findByExternalId(user.getExternalId()) - .or(() -> findByEmail(user.getEmail())); + return repository.findByExternalId(user.getExternalId()).or(() -> findByEmail(user.getEmail())); } private Optional<User> findByEmail(String email) { diff --git a/user-manager-server/src/main/java/de/ozgcloud/user/settings/UserSettings.java b/user-manager-server/src/main/java/de/ozgcloud/user/settings/UserSettings.java index 98750779cff7eb83294ce5914502af226621d865..594f462277faf584988d2e43a07438a833d2a6a6 100644 --- a/user-manager-server/src/main/java/de/ozgcloud/user/settings/UserSettings.java +++ b/user-manager-server/src/main/java/de/ozgcloud/user/settings/UserSettings.java @@ -54,4 +54,13 @@ public class UserSettings { public UserSettings(final NotificationsSendFor notificationsSendFor) { this(notificationsSendFor, notificationsSendFor == NotificationsSendFor.ALL, true, true, true); } + + public static UserSettings createDefault() { + return UserSettings.builder() + .notificationsSendFor(NotificationsSendFor.NONE) + .vorgangCreated(false) + .vorgangAssignedToUser(true) + .postfachNachrichtFromAntragsteller(true) + .wiedervorlageOverdue(true).build(); + } } diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/UserServiceTest.java b/user-manager-server/src/test/java/de/ozgcloud/user/UserServiceTest.java index a78a6738176d01b09e0d4af4b7a829e958c10afd..434d355536c0ccc3b261ad8557e9aeab7eda031d 100644 --- a/user-manager-server/src/test/java/de/ozgcloud/user/UserServiceTest.java +++ b/user-manager-server/src/test/java/de/ozgcloud/user/UserServiceTest.java @@ -45,6 +45,8 @@ import org.mockito.Spy; import de.ozgcloud.user.common.errorhandling.ResourceNotFoundException; import de.ozgcloud.user.common.errorhandling.TechnicalException; import de.ozgcloud.user.keycloak.KeycloakUserRemoteService; +import de.ozgcloud.user.settings.NotificationsSendFor; +import de.ozgcloud.user.settings.UserSettings; class UserServiceTest { @@ -365,4 +367,36 @@ class UserServiceTest { assertThatNoException().isThrownBy(() -> service.assertInactiveUser(user.build())); } } + + @Nested + class TestSaveNewUser { + + @Test + void shouldSetDefaultUserSettings() { + var user = UserTestFactory.createBuilder().userSettings(null).build(); + + service.saveNewUser(user); + + assertThat(user.getUserSettings()).usingRecursiveComparison().isEqualTo(UserSettings.createDefault()); + } + + @Test + void shouldNotSetDefaultUserSettings() { + var settings = UserSettings.builder().notificationsSendFor(NotificationsSendFor.ALL).build(); + var user = createBuilder().userSettings(settings).build(); + + service.saveNewUser(user); + + assertThat(user.getUserSettings()).isEqualTo(settings); + } + + @Test + void shouldPersistUser() { + var user = UserTestFactory.create(); + + service.saveNewUser(user); + + verify(repository).persist(user); + } + } } \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsTest.java b/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsTest.java index 79462f46101c27cf0d9f858ae2a96c6bbae6756f..b3c52e9efb8f5fb02fe24e1cab478af307ad0543 100644 --- a/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsTest.java +++ b/user-manager-server/src/test/java/de/ozgcloud/user/settings/UserSettingsTest.java @@ -24,4 +24,15 @@ class UserSettingsTest { } } + @Nested + class TestCreateDefault { + + @Test + void shouldHaveDefaultSettings() { + assertThat(UserSettings.createDefault()).usingRecursiveComparison().isEqualTo( + UserSettings.builder().notificationsSendFor(NotificationsSendFor.NONE).vorgangCreated(false).vorgangAssignedToUser(true) + .postfachNachrichtFromAntragsteller(true).wiedervorlageOverdue(true).build()); + } + + } } \ No newline at end of file