diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index 61d6f145b22eb3861f8c3b380dadf503a656b6a4..dff8ab4e0679810f3eabeabf684ab1095cd08a31 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -17,7 +17,7 @@ <properties> <vorgang-manager.version>2.7.0</vorgang-manager.version> <nachrichten-manager.version>2.7.0</nachrichten-manager.version> - <api-lib.version>0.8.0</api-lib.version> + <api-lib.version>0.9.0-SNAPSHOT</api-lib.version> </properties> <dependencies> diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java index 7a98cf91701338396eda4dba01c8e7b71c8751e4..2016ea933f0c61b98a22b8ef0e04492e0df6af6e 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java @@ -40,6 +40,7 @@ import de.ozgcloud.bescheid.Bescheid.SendBy; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.binaryfile.BinaryFileService; import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; +import de.ozgcloud.bescheid.common.user.UserProfileService; import de.ozgcloud.bescheid.nachricht.NachrichtService; import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.command.Command; @@ -94,6 +95,7 @@ class BescheidEventListener { private final ApplicationEventPublisher eventPublisher; private final CurrentUserService userService; + private final UserProfileService userProfileService; private final BescheidFeatureProperties bescheidFeatureProperties; @EventListener(condition = IS_CREATE_BESCHEID) @@ -177,7 +179,7 @@ class BescheidEventListener { Optional.ofNullable(eventBody.get(GENEHMIGT_BODYKEY)) .map(Object::toString).map(Boolean::valueOf) .ifPresentOrElse(builder::genehmigt, () -> builder.genehmigt(true)); - builder.createFor(userService.getUserProfile()); + builder.createFor(userProfileService.getUserProfile()); return builder.build(); } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfiguration.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..4cf07e25e4cca9e218a57be1ae82d837639c58d9 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfiguration.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.bescheid; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import de.ozgcloud.apilib.common.command.OzgCloudCommandService; +import de.ozgcloud.apilib.common.command.grpc.CommandMapper; +import de.ozgcloud.apilib.common.command.grpc.GrpcOzgCloudCommandService; +import de.ozgcloud.bescheid.common.callcontext.BescheidManagerCallContextProvider; +import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc; +import net.devh.boot.grpc.client.inject.GrpcClient; + +@Configuration +public class BescheidManagerConfiguration { + + @GrpcClient("command-manager") + private CommandServiceGrpc.CommandServiceBlockingStub commandServiceStub; + + @Bean("bescheid_OzgCloudCommandService") + OzgCloudCommandService grpcOzgCloudCommandService(CommandMapper commandMapper, BescheidManagerCallContextProvider contextProvider) { + return new GrpcOzgCloudCommandService(commandServiceStub, commandMapper, contextProvider, + GrpcOzgCloudCommandService.DEFAULT_COMMAND_REQUEST_THRESHOLD_MILLIS); + } +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java index 26d88f90e6d56eec4f4727487e26cf9597107024..bd827b7b2f17effbf96c62304087fcf873925227 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java @@ -2,7 +2,7 @@ package de.ozgcloud.bescheid; import java.time.LocalDate; -import de.ozgcloud.bescheid.common.callcontext.UserProfile; +import de.ozgcloud.bescheid.common.user.UserProfile; import de.ozgcloud.bescheid.vorgang.VorgangId; import lombok.Builder; import lombok.Getter; diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java index 7d7a715a589b079b30ec971790574dc899ab3cf2..667106fd6da1ee186c2cf9c57f364194340bdc13 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java @@ -12,7 +12,7 @@ import org.springframework.stereotype.Service; import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.attributes.ClientAttributeService; -import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; +import de.ozgcloud.bescheid.common.user.UserProfileService; import de.ozgcloud.bescheid.nachricht.NachrichtService; import de.ozgcloud.bescheid.vorgang.Vorgang; import de.ozgcloud.bescheid.vorgang.VorgangId; @@ -33,7 +33,7 @@ class BescheidService { private final VorgangService vorgangService; private final AttachedItemService attachedItemService; private final NachrichtService nachrichtService; - private final CurrentUserService currentUserService; + private final UserProfileService currentUserService; private final ClientAttributeService bescheidClientAttributeService; private final BuildProperties buildProperties; private final Optional<BescheidRemoteService> remoteService; diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java index 7a3e82b746121e49326e8d24d2484f41693c912a..a35cfba56298f590a86a02eeb4cddfae30945aaa 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java @@ -35,6 +35,8 @@ import java.util.stream.Collectors; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import de.ozgcloud.apilib.common.command.OzgCloudCommand; @@ -45,11 +47,9 @@ import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.command.Command; import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @Service -@RequiredArgsConstructor @Log4j2 public class AttachedItemService { @@ -61,9 +61,13 @@ public class AttachedItemService { private static final Predicate<String> notExpectedSendByValue = sendBy -> !ArrayUtils.contains(Bescheid.SendBy.values(), sendBy); - private final OzgCloudCommandService commandService; - private final VorgangAttachedItemRemoteService remoteService; - private final CommandMapper commandMapper; + @Autowired + @Qualifier("bescheid_OzgCloudCommandService") + private OzgCloudCommandService commandService; + @Autowired + private VorgangAttachedItemRemoteService remoteService; + @Autowired + private CommandMapper commandMapper; public Optional<AttachedItem> findBescheidItem(String vorgangId) { return remoteService.findBescheidDraft(vorgangId); @@ -179,7 +183,7 @@ public class AttachedItemService { void validateBescheidStatus(AttachedItem bescheid) { var bescheidStatus = MapUtils.getString(bescheid.getItem(), Bescheid.FIELD_STATUS); if (Bescheid.Status.DRAFT.not(bescheidStatus)) { - throw new TechnicalException("Bescheid draft with ID '%s' has an unexpected status: '%s'" .formatted(bescheid.getId(), bescheidStatus)); + throw new TechnicalException("Bescheid draft with ID '%s' has an unexpected status: '%s'".formatted(bescheid.getId(), bescheidStatus)); } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProvider.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..40cbdaffe962730c81d9c95239babda672aac989 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProvider.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.bescheid.common.callcontext; + +import java.util.Optional; + +import org.springframework.stereotype.Component; + +import de.ozgcloud.apilib.common.callcontext.CallContext; +import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider; +import de.ozgcloud.apilib.user.OzgCloudUserId; +import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +public class BescheidManagerCallContextProvider implements OzgCloudCallContextProvider { + + private final CurrentUserService currentUserService; + + @Override + public CallContext provideContext() { + var callContextBuilder = CallContext.builder().clientName(BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); + getUserId().ifPresent(callContextBuilder::userId); + return callContextBuilder.build(); + } + + Optional<OzgCloudUserId> getUserId() { + return currentUserService.getUser().getUserId().map(OzgCloudUserId::from); + } +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/CurrentUserService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/CurrentUserService.java index 4d1287ab868cea9f8e80cc3494ffcec00eb70a3c..b77b10a648b85eb1da8a39dfc30ecd6a00f18cd9 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/CurrentUserService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/CurrentUserService.java @@ -35,10 +35,7 @@ import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; -import de.ozgcloud.apilib.user.OzgCloudUserId; -import de.ozgcloud.apilib.user.OzgCloudUserProfileService; import de.ozgcloud.command.Command; -import de.ozgcloud.common.errorhandling.TechnicalException; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @@ -46,21 +43,11 @@ import lombok.RequiredArgsConstructor; public class CurrentUserService { private final AuthenticationTrustResolver trustResolver; - private final Optional<OzgCloudUserProfileService> userProfileService; - private final UserProfileMapper mapper; public CallContextUser getUser() { return findUser().orElseThrow(() -> new IllegalStateException("No authenticated User found")); } - public UserProfile getUserProfile() { - var service = userProfileService.orElseThrow(() -> new IllegalStateException("No connection to user-manager configured.")); - - return getUser().getUserId().map(OzgCloudUserId::from) - .map(service::getById) - .map(mapper::mapProfile).orElseThrow(() -> new TechnicalException("Unknown UserId or cannot load user profile.")); - } - public Optional<CallContextUser> findUser() { return findTrustedAuthentication() .map(this::mapToCallContextUser) diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfile.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfile.java deleted file mode 100644 index 1cd483d3afedb2b08408fa9d1035394e01db604b..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfile.java +++ /dev/null @@ -1,15 +0,0 @@ -package de.ozgcloud.bescheid.common.callcontext; - -import de.ozgcloud.bescheid.UserId; -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class UserProfile { - - private UserId id; - private String firstName; - private String lastName; - private String email; -} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfileMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfileMapper.java deleted file mode 100644 index 7563fe9d5b54622db946ac118073d618a40ded92..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfileMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.ozgcloud.bescheid.common.callcontext; - -import org.mapstruct.Mapper; - -import de.ozgcloud.apilib.user.OzgCloudUserId; -import de.ozgcloud.apilib.user.OzgCloudUserProfile; -import de.ozgcloud.bescheid.UserId; - -@Mapper -public interface UserProfileMapper { - - UserProfile mapProfile(OzgCloudUserProfile userProfile); - - default UserId mapUserId(OzgCloudUserId id) { - return UserId.from(id.toString()); - } -} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfileTestFactory.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfileTestFactory.java deleted file mode 100644 index 6c3af38e8d5b766849f6e0f46091609dfe3bfcb5..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfileTestFactory.java +++ /dev/null @@ -1,30 +0,0 @@ -package de.ozgcloud.bescheid.common.callcontext; - -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.bescheid.UserId; - -public class UserProfileTestFactory { - - private static final LoremIpsum LOREM_IPSUM = LoremIpsum.getInstance(); - - public static final UserId ID = UserId.from(UUID.randomUUID().toString()); - - public static final String FIRST_NAME = LOREM_IPSUM.getFirstName(); - public static final String LAST_NAME = LOREM_IPSUM.getLastName(); - public static final String EMAIL = "test-email@local"; - - public static UserProfile create() { - return createBuilder().build(); - } - - public static UserProfile.UserProfileBuilder createBuilder() { - return UserProfile.builder() - .id(ID) - .firstName(FIRST_NAME) - .lastName(LAST_NAME) - .email(EMAIL); - } -} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfile.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfile.java new file mode 100644 index 0000000000000000000000000000000000000000..889dbbad42e09d5195cc3daa107994e9af542b5f --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfile.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.bescheid.common.user; + +import de.ozgcloud.bescheid.UserId; +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +public class UserProfile { + + private UserId id; + private String firstName; + private String lastName; + private String email; +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..0c7c5ceda1c008597995a38a5306b704226085b6 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileMapper.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.bescheid.common.user; + +import org.mapstruct.Mapper; + +import de.ozgcloud.apilib.user.OzgCloudUserId; +import de.ozgcloud.apilib.user.OzgCloudUserProfile; +import de.ozgcloud.bescheid.UserId; + +@Mapper +public interface UserProfileMapper { + + UserProfile mapProfile(OzgCloudUserProfile userProfile); + + default UserId mapUserId(OzgCloudUserId id) { + return UserId.from(id.toString()); + } +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileService.java new file mode 100644 index 0000000000000000000000000000000000000000..5346ead50451064408dd1db5146536520b566b99 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileService.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.bescheid.common.user; + +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import de.ozgcloud.apilib.user.OzgCloudUserId; +import de.ozgcloud.apilib.user.OzgCloudUserProfileService; +import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; +import de.ozgcloud.common.errorhandling.TechnicalException; +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class UserProfileService { + + private final CurrentUserService currentUserService; + private final Optional<OzgCloudUserProfileService> userProfileService; + private final UserProfileMapper mapper; + + public UserProfile getUserProfile() { + var service = userProfileService.orElseThrow(() -> new IllegalStateException("No connection to user-manager configured.")); + + return currentUserService.getUser().getUserId().map(OzgCloudUserId::from) + .map(service::getById) + .map(mapper::mapProfile).orElseThrow(() -> new TechnicalException("Unknown UserId or cannot load user profile.")); + } + +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileTestFactory.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..8b20aa41c65568e456538a45f3c363d1a18cbded --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileTestFactory.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.bescheid.common.user; + +import java.util.UUID; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.bescheid.UserId; + +public class UserProfileTestFactory { + + private static final LoremIpsum LOREM_IPSUM = LoremIpsum.getInstance(); + + public static final UserId ID = UserId.from(UUID.randomUUID().toString()); + + public static final String FIRST_NAME = LOREM_IPSUM.getFirstName(); + public static final String LAST_NAME = LOREM_IPSUM.getLastName(); + public static final String EMAIL = "test-email@local"; + + public static UserProfile create() { + return createBuilder().build(); + } + + public static UserProfile.UserProfileBuilder createBuilder() { + return UserProfile.builder() + .id(ID) + .firstName(FIRST_NAME) + .lastName(LAST_NAME) + .email(EMAIL); + } +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java index 49dbcf4a62be1cd1de9be68c57eb857b86559163..12268d4e0a14d3a4605f60f2b849033b00b91171 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java @@ -8,6 +8,8 @@ import java.util.Optional; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import de.ozgcloud.apilib.common.command.OzgCloudCommand; @@ -19,12 +21,10 @@ import de.ozgcloud.common.errorhandling.TechnicalException; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; -import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @Service @Log4j2 -@RequiredArgsConstructor public class NachrichtService { public static final String SEND_POSTFACH_NACHRICHT_ORDER = "SEND_POSTFACH_NACHRICHT"; @@ -35,10 +35,15 @@ public class NachrichtService { static final String FIELD_MAIL_BODY = "mailBody"; static final String FIELD_ATTACHMENTS = "attachments"; - private final NachrichtRemoteService remoteService; - private final Configuration freemarkerCfg; - private final OzgCloudCommandService commandService; - private final CommandMapper commandMapper; + @Autowired + private NachrichtRemoteService remoteService; + @Autowired + private Configuration freemarkerCfg; + @Autowired + @Qualifier("bescheid_OzgCloudCommandService") + private OzgCloudCommandService commandService; + @Autowired + private CommandMapper commandMapper; static final String SUBJECT = "Ihr Antrag"; diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java index 07c961a2ea1358c9f6ffb50daf83c30b4433ea8f..b3ce8a3e1a88daa5cff3e3a4b6af9f6b46ce2e98 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java @@ -30,7 +30,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidRemoteService; import de.ozgcloud.bescheid.BescheidRequest; -import de.ozgcloud.bescheid.common.callcontext.UserProfile; +import de.ozgcloud.bescheid.common.user.UserProfile; import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsBescheidRemoteService.SmartDocumentsResponse.SmartDocumentDocument; import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsBescheidRemoteService.SmartDocumentsResponse.SmartDocumentFile; import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsRequest.CustomerData; diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java index 8afc3d2ba7b37ed2b79a2574c946473bcf9ae7e6..09b366285262b009acc54f131611760025ef1c5d 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java @@ -1,22 +1,26 @@ package de.ozgcloud.bescheid.vorgang; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import de.ozgcloud.apilib.common.command.OzgCloudCommand; import de.ozgcloud.apilib.common.command.OzgCloudCommandService; import de.ozgcloud.apilib.common.command.grpc.CommandMapper; import lombok.NonNull; -import lombok.RequiredArgsConstructor; @Service("bescheid_VorgangService") -@RequiredArgsConstructor public class VorgangService { static final String VORGANG_BESCHEIDEN = "VORGANG_BESCHEIDEN"; - private final VorgangRemoteService remoteService; - private final OzgCloudCommandService commandService; - private final CommandMapper commandMapper; + @Autowired + private VorgangRemoteService remoteService; + @Autowired + @Qualifier("bescheid_OzgCloudCommandService") + private OzgCloudCommandService commandService; + @Autowired + private CommandMapper commandMapper; public Vorgang getById(@NonNull VorgangId id) { return remoteService.getById(id); diff --git a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java index 905af6829977ceeeff99a5b6830f9f8c9a59bb71..54d398b8c5d55ce78f57da999f09df3326d23d99 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java @@ -31,6 +31,8 @@ import java.util.Optional; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import de.ozgcloud.apilib.common.command.OzgCloudCommand; @@ -42,10 +44,8 @@ import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.command.Command; import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; @Service -@RequiredArgsConstructor public class DocumentService { public static final String DOCUMENT_ITEM_NAME = "Document"; @@ -56,10 +56,15 @@ public class DocumentService { public static final String FIELD_DOCUMENT_FILE = "documentFile"; public static final String FIELD_NACHRICHT_TEXT = "nachrichtText"; - private final AttachedItemService attachedItemService; - private final OzgCloudCommandService commandService; - private final CommandMapper commandMapper; - private final DocumentMapper documentMapper; + @Autowired + private AttachedItemService attachedItemService; + @Autowired + @Qualifier("bescheid_OzgCloudCommandService") + private OzgCloudCommandService commandService; + @Autowired + private CommandMapper commandMapper; + @Autowired + private DocumentMapper documentMapper; public String createBescheidDocument(Command command) { return createBescheidDocument(command, buildItemMap(command)); diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java index 749783d0d6158a3f8bcd3379909abe6e28d9e58c..4f6cf30d7290c65804d6a0e36ac0615b0c338a94 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java @@ -15,7 +15,8 @@ import de.ozgcloud.apilib.common.command.OzgCloudCommandService; import de.ozgcloud.apilib.common.command.grpc.CommandMapper; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; -import de.ozgcloud.bescheid.common.callcontext.UserProfile; +import de.ozgcloud.bescheid.common.user.UserProfile; +import de.ozgcloud.bescheid.common.user.UserProfileService; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandCreatedEventTestFactory; import de.ozgcloud.command.CommandTestFactory; @@ -34,6 +35,8 @@ class BescheidEventListenerITCase { @MockBean private CurrentUserService userService; @MockBean + private UserProfileService userProfileService; + @MockBean private OzgCloudCommandService commandService; @MockBean private CommandMapper commandMapper; @@ -45,7 +48,7 @@ class BescheidEventListenerITCase { @BeforeEach void init() { - when(userService.getUserProfile()).thenReturn(userProfile); + when(userProfileService.getUserProfile()).thenReturn(userProfile); } @Nested diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java index 593195a2ff36a039b2c2ee1d3e65924657d9cacb..1288fbea070e6808012351618bf72a299175d5c1 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java @@ -27,8 +27,9 @@ import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory; import de.ozgcloud.bescheid.binaryfile.BinaryFileService; import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; -import de.ozgcloud.bescheid.common.callcontext.UserProfile; -import de.ozgcloud.bescheid.common.callcontext.UserProfileTestFactory; +import de.ozgcloud.bescheid.common.user.UserProfile; +import de.ozgcloud.bescheid.common.user.UserProfileService; +import de.ozgcloud.bescheid.common.user.UserProfileTestFactory; import de.ozgcloud.bescheid.nachricht.NachrichtService; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandCreatedEventTestFactory; @@ -61,6 +62,8 @@ class BescheidEventListenerTest { private ApplicationEventPublisher eventPublisher; @Mock private CurrentUserService userService; + @Mock + private UserProfileService userProfileService; @Nested class TestOnCreateBescheidCommand { @@ -215,7 +218,7 @@ class BescheidEventListenerTest { @Test void shouldContainUserProfile() { UserProfile user = UserProfileTestFactory.create(); - when(userService.getUserProfile()).thenReturn(user); + when(userProfileService.getUserProfile()).thenReturn(user); var request = listener.createRequest(COMMAND); diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java index adbf4523c29c4d37128a2d484876a045d078762a..dbe4f9e43deb4fbcd43ea0b8b960bc3861570174 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java @@ -2,7 +2,7 @@ package de.ozgcloud.bescheid; import java.time.LocalDate; -import de.ozgcloud.bescheid.common.callcontext.UserProfileTestFactory; +import de.ozgcloud.bescheid.common.user.UserProfileTestFactory; import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java index 1c75018438672471dbcd4918ae9bb537f768dc3c..5e7de1cb2f2c2298dcb087b239b88a94ed6e58be 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java @@ -26,8 +26,8 @@ import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory; import de.ozgcloud.bescheid.attributes.ClientAttributeService; -import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; -import de.ozgcloud.bescheid.common.callcontext.UserProfile; +import de.ozgcloud.bescheid.common.user.UserProfile; +import de.ozgcloud.bescheid.common.user.UserProfileService; import de.ozgcloud.bescheid.nachricht.NachrichtService; import de.ozgcloud.bescheid.vorgang.ServiceKontoTestFactory; import de.ozgcloud.bescheid.vorgang.Vorgang; @@ -54,7 +54,7 @@ class BescheidServiceTest { @Mock private NachrichtService nachrichtService; @Mock - private CurrentUserService currentUserService; + private UserProfileService userProfileService; @Mock private UserProfile callContextUser; @Mock @@ -181,7 +181,7 @@ class BescheidServiceTest { doNothing().when(service).validateBescheidSendPostfach(any(), anyLong()); lenient().when(callContextUser.getId()).thenReturn(UserId.from("user-id")); - lenient().when(currentUserService.getUserProfile()).thenReturn(callContextUser); + lenient().when(userProfileService.getUserProfile()).thenReturn(callContextUser); } @Test @@ -358,7 +358,7 @@ class BescheidServiceTest { @BeforeEach void init() { when(callContextUser.getId()).thenReturn(UserId.from(CREATED_BY)); - when(currentUserService.getUserProfile()).thenReturn(callContextUser); + when(userProfileService.getUserProfile()).thenReturn(callContextUser); doReturn(FileId.from(DocumentTestFactory.DOCUMENT_FILE)).when(service).getBescheidFileId(any()); } @@ -417,7 +417,7 @@ class BescheidServiceTest { void shouldCallCurrentUserService() { buildBescheid(); - verify(currentUserService).getUserProfile(); + verify(userProfileService).getUserProfile(); } @Test diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java index 12469cfc9df73ca8a18c288c3a6ae5c68f4921cb..b1f74c30adb5f027a3a245c244fae00d0d2cad1a 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java @@ -7,7 +7,7 @@ import org.springframework.http.MediaType; import com.thedeanda.lorem.LoremIpsum; -import de.ozgcloud.bescheid.common.callcontext.UserProfileTestFactory; +import de.ozgcloud.bescheid.common.user.UserProfileTestFactory; import de.ozgcloud.bescheid.vorgang.ServiceKontoTestFactory; import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; import de.ozgcloud.common.binaryfile.FileId; diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProviderTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProviderTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ec9d3dee4685bb202d88fe617c8235ad2270b717 --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProviderTest.java @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.bescheid.common.callcontext; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.Optional; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; + +import de.ozgcloud.apilib.user.OzgCloudUserId; +import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; + +class BescheidManagerCallContextProviderTest { + + @Spy + @InjectMocks + private BescheidManagerCallContextProvider provider; + + @Mock + private CurrentUserService currentUserService; + @Mock + private CallContextUser contextUser; + @Mock + private OzgCloudUserId userId; + + @Nested + class TestProvideContext { + + @BeforeEach + void init() { + doReturn(Optional.of(userId)).when(provider).getUserId(); + } + + @Test + void shouldCallGetUserId() { + provider.provideContext(); + + verify(provider).getUserId(); + } + + @Test + void shouldSetUserId() { + var result = provider.provideContext(); + + assertThat(result.getUserId()).isSameAs(userId); + } + + @Test + void shouldSetClientName() { + var result = provider.provideContext(); + + assertThat(result.getClientName()).isEqualTo(BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); + } + } + + @Nested + class TestGetUserId { + + private static final String USER_ID = "userId"; + + @BeforeEach + void init() { + when(currentUserService.getUser()).thenReturn(contextUser); + } + + @Test + void shouldReturnUserId() { + when(contextUser.getUserId()).thenReturn(Optional.of(USER_ID)); + + var result = provider.getUserId(); + + assertThat(result).isPresent().get().hasToString(USER_ID); + } + + } +} \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java index 41ad8368a3b350af6790e6cc20c0d3e327d792ae..5f97a1dec5806f852df409c58870dd56278aa415 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java @@ -15,7 +15,7 @@ import org.mockito.Spy; import de.ozgcloud.bescheid.BescheidRequestTestFactory; import de.ozgcloud.bescheid.BescheidTestFactory; -import de.ozgcloud.bescheid.common.callcontext.UserProfileTestFactory; +import de.ozgcloud.bescheid.common.user.UserProfileTestFactory; import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsRequest.CustomerData.UserData; import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; import de.ozgcloud.common.binaryfile.TempFileUtils; diff --git a/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/CallContextAuthenticationTokenTestFactory.java b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/CallContextAuthenticationTokenTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..55bc9ffb1fc75bcb130a454657d7a1c8b3c74db8 --- /dev/null +++ b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/CallContextAuthenticationTokenTestFactory.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.callcontext; + +public class CallContextAuthenticationTokenTestFactory { + + public static CallContextAuthenticationToken create() { + return CallContextAuthenticationToken.authenticate(CallContextUserTestFactory.create()); + } +} diff --git a/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUser.java b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUser.java new file mode 100644 index 0000000000000000000000000000000000000000..ecdab688eae1bfd7127f1bf5f220bcf0dc05676a --- /dev/null +++ b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUser.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.callcontext; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import org.springframework.security.test.context.support.WithSecurityContext; + +@Retention(RetentionPolicy.RUNTIME) +@WithSecurityContext(factory = WithMockCustomUserSecurityContextFactory.class) +public @interface WithMockCustomUser { + + String userId() default "default-user-id-0"; + + String clientName() default CallContextTestFactory.CLIENT; + + String username() default UserTestFactory.NAME; + + boolean organisationEinheitenIdCheckNecessary() default false; +} diff --git a/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUserSecurityContextFactory.java b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUserSecurityContextFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..f88a2454a4d4902772a759c7e54f620ca0d32ac2 --- /dev/null +++ b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUserSecurityContextFactory.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.callcontext; + +import java.util.Optional; + +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.test.context.support.WithSecurityContextFactory; + +public class WithMockCustomUserSecurityContextFactory implements WithSecurityContextFactory<WithMockCustomUser> { + + @Override + public SecurityContext createSecurityContext(WithMockCustomUser annotation) { + SecurityContext context = SecurityContextHolder.getContext(); + context.setAuthentication(CallContextAuthenticationToken.authenticate(createUser(annotation))); + return context; + } + + CallContextUser createUser(WithMockCustomUser mockCustomUser) { + var builder = CallContextUser.builder() + .userId(Optional.ofNullable(mockCustomUser.userId())) + .userName(Optional.ofNullable(mockCustomUser.username())) + .clientName(mockCustomUser.clientName()) + .organisationEinheitenIdCheckNecessary(mockCustomUser.organisationEinheitenIdCheckNecessary()); + + return builder.build(); + } +} diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index 157251c1a1f3de988bc1466ff78316d304ff583c..c8f90d5eada01439f5c476210b2d754fa203f527 100644 --- a/vorgang-manager-server/pom.xml +++ b/vorgang-manager-server/pom.xml @@ -53,9 +53,9 @@ <zufi-manager-interface.version>1.0.0-SNAPSHOT</zufi-manager-interface.version> <user-manager-interface.version>2.1.0</user-manager-interface.version> - <bescheid-manager.version>1.11.0</bescheid-manager.version> + <bescheid-manager.version>1.12.0-SNAPSHOT</bescheid-manager.version> <processor-manager.version>0.4.0</processor-manager.version> - <ozgcloud-starter.version>0.7.0</ozgcloud-starter.version> + <ozgcloud-starter.version>0.9.0-SNAPSHOT</ozgcloud-starter.version> <nachrichten-manager.version>2.7.0</nachrichten-manager.version> <notification-manager.version>2.7.0</notification-manager.version> diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerCallContextProvider.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerCallContextProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..62811097900c5e6daee5d06831962184579d63b8 --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerCallContextProvider.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang; + +import java.util.Optional; + +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +import de.ozgcloud.apilib.common.callcontext.CallContext; +import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider; +import de.ozgcloud.apilib.user.OzgCloudUserId; +import de.ozgcloud.vorgang.callcontext.CurrentUserService; +import de.ozgcloud.vorgang.callcontext.VorgangManagerClientCallContextAttachingInterceptor; +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +@Primary +public class VorgangManagerCallContextProvider implements OzgCloudCallContextProvider { + + private final CurrentUserService currentUserService; + + @Override + public CallContext provideContext() { + var callContextBuilder = CallContext.builder().clientName(VorgangManagerClientCallContextAttachingInterceptor.VORGANG_MANAGER_CLIENT_NAME); + getUserId().ifPresent(callContextBuilder::userId); + return callContextBuilder.build(); + } + + Optional<OzgCloudUserId> getUserId() { + return currentUserService.getUser().getUserId().map(OzgCloudUserId::from); + } +} diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerServerConfiguration.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerServerConfiguration.java index 477496a0f283029d0070d996f15b515702a58ba5..685b4dded3009cbecf85b8da24a283cb6db7f84e 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerServerConfiguration.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerServerConfiguration.java @@ -1,10 +1,17 @@ package de.ozgcloud.vorgang; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; +import de.ozgcloud.apilib.common.command.OzgCloudCommandService; +import de.ozgcloud.apilib.common.command.grpc.CommandMapper; +import de.ozgcloud.apilib.common.command.grpc.GrpcOzgCloudCommandService; +import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc; import io.mongock.runner.springboot.EnableMongock; +import net.devh.boot.grpc.client.inject.GrpcClient; @Configuration @EnableMongock @@ -12,4 +19,13 @@ import io.mongock.runner.springboot.EnableMongock; @EnableElasticsearchRepositories(basePackages = "de.ozgcloud.vorgang.common.search") public class VorgangManagerServerConfiguration { + @GrpcClient("command-manager") + private CommandServiceGrpc.CommandServiceBlockingStub commandServiceStub; + + @Bean + @Primary + OzgCloudCommandService grpcOzgCloudCommandService(CommandMapper commandMapper, VorgangManagerCallContextProvider contextProvider) { + return new GrpcOzgCloudCommandService(commandServiceStub, commandMapper, contextProvider, + GrpcOzgCloudCommandService.DEFAULT_COMMAND_REQUEST_THRESHOLD_MILLIS); + } } diff --git a/vorgang-manager-server/src/main/resources/application.yml b/vorgang-manager-server/src/main/resources/application.yml index b00d8d279e619625334847391eadabd834ea73ff..199ca973f38f2efa7bc7a93b79c20cf21c0d21e0 100644 --- a/vorgang-manager-server/src/main/resources/application.yml +++ b/vorgang-manager-server/src/main/resources/application.yml @@ -37,6 +37,10 @@ grpc: negotiationType: TLS info-manager: negotiationType: TLS + command-manager: + address: self:self + negotiationType: PLAINTEXT + server: security: enabled: true diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java index 74eef7dbb26dfe69c8005de551357a261d07474a..862bcfc0e3bd82d6421482ffe0d34fa0cc75eaea 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java @@ -29,16 +29,14 @@ import static org.awaitility.Awaitility.*; import static org.mockito.Mockito.*; import java.util.Map; -import java.util.Optional; import java.util.concurrent.TimeUnit; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Captor; -import org.mockito.Mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; @@ -48,14 +46,15 @@ import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.gridfs.GridFsTemplate; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.test.annotation.DirtiesContext; import com.mongodb.client.gridfs.model.GridFSFile; +import de.ozgcloud.apilib.user.OzgCloudUserId; +import de.ozgcloud.apilib.user.OzgCloudUserProfile; +import de.ozgcloud.apilib.user.OzgCloudUserProfileService; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; -import de.ozgcloud.bescheid.common.callcontext.CallContextUser; -import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; -import de.ozgcloud.bescheid.common.callcontext.UserProfile; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandCreatedEvent; import de.ozgcloud.command.CommandStatus; @@ -68,6 +67,7 @@ import de.ozgcloud.nachrichten.postfach.PostfachRemoteService; import de.ozgcloud.vorgang.VorgangManagerServerApplication; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory; +import de.ozgcloud.vorgang.callcontext.CallContextAuthenticationTokenTestFactory; import de.ozgcloud.vorgang.command.CommandService; import de.ozgcloud.vorgang.command.CommandTestFactory; import de.ozgcloud.vorgang.command.CreateCommandRequest; @@ -83,11 +83,11 @@ import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; "grpc.client.vorgang-manager.address=in-process:test", "grpc.client.nachrichten-manager.address=in-process:test", "grpc.client.pluto.address=in-process:test", + "grpc.client.command-manager.address=in-process:test", "ozgcloud.feature.bescheid.enable-dummy-document-processor=true", }) @DataITCase @DirtiesContext -@Disabled("fix later") class BescheidEventListenerITCase { @Autowired @@ -105,11 +105,7 @@ class BescheidEventListenerITCase { @MockBean private PostfachRemoteService postfachRemoteService; @MockBean - private CurrentUserService currentUserService; - @Mock - private CallContextUser callContextUser; - @Mock - private UserProfile userProfile; + private OzgCloudUserProfileService userProfileService; @Captor private ArgumentCaptor<BescheidDocumentCreatedEvent> bescheidDocumentCreatedEventCaptor; @@ -118,9 +114,8 @@ class BescheidEventListenerITCase { void init() { mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME); mongoOperations.dropCollection(Vorgang.COLLECTION_NAME); - when(currentUserService.getUser()).thenReturn(callContextUser); - when(currentUserService.getUserProfile()).thenReturn(userProfile); when(postfachRemoteService.getPostfachType()).thenReturn("dummy"); + when(userProfileService.getById(any())).thenReturn(OzgCloudUserProfile.builder().id(OzgCloudUserId.from("user-id")).build()); } @Nested @@ -272,13 +267,17 @@ class BescheidEventListenerITCase { @BeforeEach void init() { - when(userProfile.getId()).thenReturn(UserId.from("user-id")); - when(callContextUser.getUserId()).thenReturn(Optional.of("user-id")); + SecurityContextHolder.getContext().setAuthentication(CallContextAuthenticationTokenTestFactory.create()); vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build()).getId(); var documentFileId = mongoOperations.save(createBescheidDocumentAttachedItem(vorgangId)).getId(); bescheidItem = mongoOperations.save(createBescheidAttachedItemWithDocument(vorgangId, documentFileId)); } + @AfterAll + static void cleanup() { + SecurityContextHolder.clearContext(); + } + @Test void shouldSuccessfullyCompleteCommand() { commandService.createCommand(buildCreateCommandRequest(vorgangId, bescheidItem)); @@ -291,9 +290,9 @@ class BescheidEventListenerITCase { @Test void shouldSetBescheidStatusToSent() { - eventPublisher.publishEvent(buildCommandCreatedEvent(vorgangId, bescheidItem)); + commandService.createCommand(buildCreateCommandRequest(vorgangId, bescheidItem)); - await().atMost(1, TimeUnit.SECONDS).untilAsserted(() -> { + await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> { verify(bescheiTestEventListener).onBescheidSentEvent(bescheidSentEventCaptor.capture()); assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name()); }); @@ -365,18 +364,6 @@ class BescheidEventListenerITCase { .build(); } - private CommandCreatedEvent buildCommandCreatedEvent(String vorgangId, VorgangAttachedItem bescheidItem) { - var command = CommandTestFactory.createBuilder() - .vorgangId(vorgangId) - .relationId(bescheidItem.getId()) - .relationVersion(bescheidItem.getVersion()) - .order(SEND_BESCHEID_ORDER) - .bodyObject(Map.of(BESCHEID_VOM_BODYKEY, "2024-01-01", - GENEHMIGT_BODYKEY, true)) - .build(); - return new CommandCreatedEvent(command); - } - private CreateCommandRequest buildCreateCommandRequest(String vorgangId, VorgangAttachedItem bescheidItem) { return CreateCommandRequest.builder() .vorgangId(vorgangId) diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java index 4523bfa243ba39f5ef3fe4581cb2e883a39f4a36..1dfd7f621d1f6249e1aa8cf0b5eb9b8caa63fb64 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java @@ -42,7 +42,8 @@ import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.common.callcontext.CallContextUser; import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; -import de.ozgcloud.bescheid.common.callcontext.UserProfile; +import de.ozgcloud.bescheid.common.user.UserProfile; +import de.ozgcloud.bescheid.common.user.UserProfileService; import de.ozgcloud.common.test.DataITCase; import de.ozgcloud.vorgang.VorgangManagerServerApplication; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; @@ -69,6 +70,8 @@ class BescheidGrpcServiceITCase { @MockBean private CurrentUserService currentUserService; + @MockBean + private UserProfileService userProfileService; @Mock private CallContextUser callContextUser; @Mock @@ -82,7 +85,7 @@ class BescheidGrpcServiceITCase { mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME); mongoOperations.dropCollection(Vorgang.COLLECTION_NAME); when(currentUserService.getUser()).thenReturn(callContextUser); - when(currentUserService.getUserProfile()).thenReturn(userProfile); + when(userProfileService.getUserProfile()).thenReturn(userProfile); } @Test diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/document/DocumentEventListenerITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/document/DocumentEventListenerITCase.java index bdbcf04f6d8bb24fdfb319fdd45a57c0bcbf9835..5f4b31816e71ee49a910b7d74dcc126735063cd6 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/document/DocumentEventListenerITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/document/DocumentEventListenerITCase.java @@ -30,22 +30,20 @@ import static org.mockito.Mockito.*; import java.util.Map; import java.util.concurrent.TimeUnit; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Captor; -import org.mockito.Mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.test.annotation.DirtiesContext; import de.ozgcloud.apilib.common.command.grpc.CommandMapper; -import de.ozgcloud.bescheid.common.callcontext.CallContextUser; -import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandCreatedEvent; import de.ozgcloud.command.CommandFailedEvent; @@ -53,6 +51,7 @@ import de.ozgcloud.common.test.DataITCase; import de.ozgcloud.vorgang.VorgangManagerServerApplication; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory; +import de.ozgcloud.vorgang.callcontext.CallContextAuthenticationTokenTestFactory; import de.ozgcloud.vorgang.command.CommandTestFactory; @SpringBootTest(classes = VorgangManagerServerApplication.class, properties = { @@ -76,20 +75,20 @@ class DocumentEventListenerITCase { @Autowired private MongoOperations mongoOperations; - @MockBean - private CurrentUserService currentUserService; - @Mock - private CallContextUser callContextUser; - @Captor private ArgumentCaptor<BescheidDocumentCreatedEvent> bescheidDocumentCreatedEventCaptor; @Captor private ArgumentCaptor<CommandFailedEvent> commandFailedEventCaptor; + @AfterAll + static void cleanup() { + SecurityContextHolder.clearContext(); + } + @BeforeEach void init() { + SecurityContextHolder.getContext().setAuthentication(CallContextAuthenticationTokenTestFactory.create()); mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME); - when(currentUserService.getUser()).thenReturn(callContextUser); } @Test diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/processor/ProcessorITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/processor/ProcessorITCase.java index 5de6cb8db43331157cd66b2f84a1f00b859ddba1..2688640366bfcfc09504f2db123a0dfba3fa12dc 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/processor/ProcessorITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/processor/ProcessorITCase.java @@ -28,6 +28,7 @@ import de.ozgcloud.processor.vorgang.Vorgang; import de.ozgcloud.processor.vorgang.VorgangId; import de.ozgcloud.processor.vorgang.VorgangService; import de.ozgcloud.vorgang.VorgangManagerServerApplication; +import de.ozgcloud.vorgang.callcontext.WithMockCustomUser; import de.ozgcloud.vorgang.command.CommandService; import de.ozgcloud.vorgang.command.CreateCommandRequest; import de.ozgcloud.vorgang.command.PersistedCommand; @@ -42,6 +43,7 @@ import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; "ozgcloud.command-manager.address=static://127.0.0.1:9091" }, classes = { VorgangManagerServerApplication.class }) @ActiveProfiles({ "local", "itcase" }) +@WithMockCustomUser class ProcessorITCase { @Autowired