diff --git a/collaboration-manager-server/pom.xml b/collaboration-manager-server/pom.xml index beaed663dc2161ae4280ba5c6b2a50ad825b6dae..3d2b4053150c52dbaf3ef9ce889c01690939a00c 100644 --- a/collaboration-manager-server/pom.xml +++ b/collaboration-manager-server/pom.xml @@ -40,7 +40,8 @@ <name>OZG-Cloud Collaboration Manager Server</name> <properties> - <vorgang-manager.version>2.18.0</vorgang-manager.version> + <vorgang-manager.version>2.20.0-PR-525-SNAPSHOT</vorgang-manager.version> + <zufi-manager.version>1.6.0</zufi-manager.version> <api-lib.version>0.13.0</api-lib.version> </properties> @@ -61,6 +62,11 @@ <artifactId>vorgang-manager-interface</artifactId> <version>${vorgang-manager.version}</version> </dependency> + <dependency> + <groupId>de.ozgcloud.zufi</groupId> + <artifactId>zufi-manager-interface</artifactId> + <version>${zufi-manager.version}</version> + </dependency> <dependency> <groupId>de.ozgcloud.api-lib</groupId> <artifactId>api-lib-core</artifactId> diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationEventListener.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationEventListener.java index 2dcbab418aad29b55cb2f4c4cd6bdd5fa3795670..fd646801d72a652752dc6787fe4b356ca920227c 100644 --- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationEventListener.java +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationEventListener.java @@ -26,6 +26,7 @@ package de.ozgcloud.collaboration; import java.util.function.Consumer; import java.util.function.Predicate; +import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationEventPublisher; @@ -34,6 +35,7 @@ import org.springframework.security.core.context.SecurityContext; import org.springframework.stereotype.Component; import de.ozgcloud.collaboration.common.callcontext.CurrentUserService; +import de.ozgcloud.collaboration.fachstelle.FachstelleService; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandCreatedEvent; import de.ozgcloud.command.CommandFailedEvent; @@ -54,6 +56,7 @@ class CollaborationEventListener { private static final String ERROR_MESSAGE_TEMPLATE = "Error on executing %s Command (id: %s)."; private final CollaborationService collaborationService; + private final FachstelleService fachstelleService; @Qualifier(CollaborationManagerConfiguration.CURRENT_USER_SERVICE_NAME) // NOSONAR private final CurrentUserService currentUserService; private final ApplicationEventPublisher eventPublisher; @@ -66,17 +69,29 @@ class CollaborationEventListener { } void createCollaborationRequest(Command command) { - var collaborationRequest = collaborationRequestMapper.toCollaborationRequest(command); + var collaborationRequest = collaborationRequestMapper.toCollaborationRequestExcludingFachstelle(command); switch (collaborationRequest.getCollaborationLevel()) { - case 1 -> collaborationService.createCollaborationRequest(collaborationRequest); - case 4 -> collaborationService.createFachstellenBeteiligungRequest(collaborationRequest); - default -> { - LOG.error("Unknown Collaboration Level: {}", collaborationRequest.getCollaborationLevel()); - eventPublisher.publishEvent(new CommandFailedEvent(command.getId(), "Unknown Collaboration Level.")); - } + case 1 -> createLevel1CollaborationRequest(collaborationRequest, command); + case 4 -> createLevel4CollaborationRequest(collaborationRequest, command); + default -> { + LOG.error("Unknown Collaboration Level: {}", collaborationRequest.getCollaborationLevel()); + eventPublisher.publishEvent(new CommandFailedEvent(command.getId(), "Unknown Collaboration Level.")); + } } } + void createLevel1CollaborationRequest(CollaborationRequest collaborationRequest, Command command) { + var fachstelle = fachstelleService + .getOrganisationEinheit(MapUtils.getString(command.getBodyObject(), CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE)); + collaborationService.createCollaborationRequest(collaborationRequest.toBuilder().zustaendigeStelle(fachstelle).build()); + } + + void createLevel4CollaborationRequest(CollaborationRequest collaborationRequest, Command command) { + var fachstelle = fachstelleService + .getExterneFachstelle(MapUtils.getString(command.getBodyObject(), CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE)); + collaborationService.createFachstellenBeteiligungRequest(collaborationRequest.toBuilder().zustaendigeStelle(fachstelle).build()); + } + void runWithSecurityContext(Command command, Consumer<Command> commandExecutor) { SecurityContext prevContext = null; try { diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerConfiguration.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerConfiguration.java index 331b155a60b7e4ca3fbd112ab4ad99e487d69e5f..e1d333b7e663a813fceafb1446dd2484ab3f15bb 100644 --- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerConfiguration.java +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerConfiguration.java @@ -61,6 +61,7 @@ public class CollaborationManagerConfiguration { public static final String VORGANG_OZGCLOUD_SERVICE_NAME = "collaboration_OzgCloudVorgangService"; public static final String COLLABORATION_SERVICE_NAME = "collaboration_CollaborationService"; public static final String COLLABORATION_REQUEST_MAPPER_NAME = "collaboration_CollaborationRequestMapper"; + public static final String FACHSTELLE_MAPPER_NAME = "collaboration_FachstelleMapper"; public static final String TEMPLATE_HANDLER_NAME = "collaboration_TemplateHandler"; public static final String VORGANG_ATTACHED_ITEM_REMOTE_SERVICE_NAME = "collaboration_VorgangAttachedItemRemoteService"; public static final String VORGANG_ATTACHED_ITEM_SERVICE_NAME = "collaboration_VorgangAttachedItemService"; @@ -73,6 +74,7 @@ public class CollaborationManagerConfiguration { public static final String GRPC_COMMAND_MANAGER_NAME = "command-manager"; public static final String GRPC_FILE_MANAGER_NAME = "file-manager"; public static final String GRPC_USER_MANAGER_NAME = "user-manager"; + public static final String GRPC_ZUFI_MANAGER_NAME = "zufi-manager"; @GrpcClient(GRPC_COMMAND_MANAGER_NAME) private CommandServiceBlockingStub commandServiceStub; diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationRequest.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationRequest.java index 6d35a03c2e4eb4dab323b1da4eff525aa7e2d865..05d26d739c4cb777a8ee6d6892e61f4c3a0e5a40 100644 --- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationRequest.java +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationRequest.java @@ -23,8 +23,11 @@ */ package de.ozgcloud.collaboration; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import de.ozgcloud.collaboration.fachstelle.Fachstelle; import de.ozgcloud.collaboration.request.CollaborationRequestId; import lombok.Builder; import lombok.Getter; @@ -59,6 +62,7 @@ public class CollaborationRequest { private String titel; @NotBlank private String beschreibung; - @NotBlank - private String zustaendigeStelle; + @Valid + @NotNull + private Fachstelle zustaendigeStelle; } diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationRequestMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationRequestMapper.java index ceb92801df5721006f223d56334170fae306465a..912ed7f52fa8d706424fc72eadd72f43d7855573 100644 --- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationRequestMapper.java +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationRequestMapper.java @@ -28,54 +28,52 @@ import java.util.Map; import org.apache.commons.collections.MapUtils; import org.mapstruct.AnnotateWith; import org.mapstruct.CollectionMappingStrategy; -import org.mapstruct.CollectionMappingStrategy; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.NullValueCheckStrategy; import org.mapstruct.NullValuePropertyMappingStrategy; import org.mapstruct.ReportingPolicy; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.NullValuePropertyMappingStrategy; -import org.mapstruct.ReportingPolicy; import de.ozgcloud.apilib.common.command.OzgCloudCommand; import de.ozgcloud.apilib.common.command.grpc.CommandMapper; import de.ozgcloud.collaboration.common.callcontext.CollaborationManagerCallContextGrpcClientInterceptor; import de.ozgcloud.collaboration.common.vorgang.attached_item.VorgangAttachedItem; +import de.ozgcloud.collaboration.fachstelle.Fachstelle; +import de.ozgcloud.collaboration.fachstelle.FachstelleMapper; import de.ozgcloud.collaboration.request.CollaborationRequestId; import de.ozgcloud.collaboration.request.GrpcCollaborationRequest; import de.ozgcloud.command.Command; import de.ozgcloud.vorgang.vorgang.GrpcCreateCollaborationRequestData; @AnnotateWith(value = Component.class, elements = @AnnotateWith.Element(strings = CollaborationManagerConfiguration.COLLABORATION_REQUEST_MAPPER_NAME)) -@Mapper(uses = { CommandMapper.class }, - unmappedTargetPolicy = ReportingPolicy.WARN, - unmappedSourcePolicy = ReportingPolicy.WARN, - nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, - nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, +@Mapper(uses = { CommandMapper.class }, // + unmappedTargetPolicy = ReportingPolicy.WARN, // + unmappedSourcePolicy = ReportingPolicy.WARN, // + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, // + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, // collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED) -public interface CollaborationRequestMapper { +public abstract class CollaborationRequestMapper { - String ITEM_NAME = "CollaborationRequest"; + static final String ITEM_NAME = "CollaborationRequest"; - String FIELD_ITEM_CLIENT = "client"; - String FIELD_ITEM_VORGANG_ID = "vorgangId"; - String FIELD_ITEM_NAME = "itemName"; - String FIELD_ITEM_BODY = "item"; + static final String FIELD_ITEM_CLIENT = "client"; + static final String FIELD_ITEM_VORGANG_ID = "vorgangId"; + static final String FIELD_ITEM_NAME = "itemName"; + static final String FIELD_ITEM_BODY = "item"; + + @Autowired + private FachstelleMapper fachstelleMapper; @Mapping(target = "collaborationVorgangId", ignore = true) @Mapping(target = "createdBy", ignore = true) + @Mapping(target = "zustaendigeStelle", ignore = true) @Mapping(target = "commandId", source = "id") @Mapping(target = "titel", expression = "java(getStringProperty(CollaborationRequest.PROPERTY_TITEL, command.getBodyObject()))") - @Mapping(target = "zustaendigeStelle", expression = "java(getStringProperty(CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, command.getBodyObject()))") @Mapping(target = "beschreibung", expression = "java(getStringProperty(CollaborationRequest.PROPERTY_BESCHREIBUNG, command.getBodyObject()))") @Mapping(target = "collaborationLevel", expression = "java(getIntProperty(CollaborationRequest.PROPERTY_COLLABORATION_LEVEL, command.getBodyObject()))") - CollaborationRequest toCollaborationRequest(Command command); - - default String getStringProperty(String key, Map<String, Object> propertyMap) { - return MapUtils.getString(propertyMap, key); - } + public abstract CollaborationRequest toCollaborationRequestExcludingFachstelle(Command command); @Mapping(target = "id", ignore = true) @Mapping(target = "status", ignore = true) @@ -89,9 +87,9 @@ public interface CollaborationRequestMapper { @Mapping(target = "vorgangId", source = "request.vorgangId") @Mapping(target = "relationId", expression = "java(commandMapper.mapRelationId(request.getVorgangId()))") @Mapping(target = "bodyObject", expression = "java(toBodyObject(request))") - OzgCloudCommand toOzgCloudCommand(CollaborationRequest request, String order); + public abstract OzgCloudCommand toOzgCloudCommand(CollaborationRequest request, String order); - default Map<String, Object> toBodyObject(CollaborationRequest request) { + Map<String, Object> toBodyObject(CollaborationRequest request) { return Map.of( FIELD_ITEM_VORGANG_ID, request.getVorgangId(), FIELD_ITEM_CLIENT, CollaborationManagerCallContextGrpcClientInterceptor.COLLABORATION_MANAGER_CLIENT_NAME, @@ -99,16 +97,17 @@ public interface CollaborationRequestMapper { FIELD_ITEM_BODY, toItemMap(request)); } - default Map<String, Object> toItemMap(CollaborationRequest request) { + Map<String, Object> toItemMap(CollaborationRequest request) { return Map.of( CollaborationRequest.PROPERTY_TITEL, request.getTitel(), CollaborationRequest.PROPERTY_BESCHREIBUNG, request.getBeschreibung(), - CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, request.getZustaendigeStelle(), + CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, fachstelleMapper.toMap(request.getZustaendigeStelle()), CollaborationRequest.PROPERTY_COLLABORATION_LEVEL, request.getCollaborationLevel(), CollaborationRequest.PROPERTY_COLLABORATION_VORGANG_ID, request.getCollaborationVorgangId()); } @Mapping(target = "titel", source = "titel") + @Mapping(target = "zustaendigeStelle", source = "zustaendigeStelle.technicalId") @Mapping(target = "idBytes", ignore = true) @Mapping(target = "mergeFrom", ignore = true) @Mapping(target = "clearField", ignore = true) @@ -121,17 +120,18 @@ public interface CollaborationRequestMapper { @Mapping(target = "unknownFields", ignore = true) @Mapping(target = "zustaendigeStelleBytes", ignore = true) @Mapping(target = "allFields", ignore = true) - GrpcCollaborationRequest toGrpcCollaborationRequest(CollaborationRequest request); + public abstract GrpcCollaborationRequest toGrpcCollaborationRequest(CollaborationRequest request); + @Mapping(target = "organisationEinheitId", source = "zustaendigeStelle.subjectId") + @Mapping(target = "organisationEinheitIdBytes", ignore = true) @Mapping(target = "mergeFrom", ignore = true) @Mapping(target = "clearField", ignore = true) @Mapping(target = "clearOneof", ignore = true) @Mapping(target = "mergeUnknownFields", ignore = true) @Mapping(target = "unknownFields", ignore = true) @Mapping(target = "vorgangIdBytes", ignore = true) - @Mapping(target = "zustaendigeStelleBytes", ignore = true) @Mapping(target = "allFields", ignore = true) - GrpcCreateCollaborationRequestData toGrpcCreateCollaborationRequestData(CollaborationRequest request); + public abstract GrpcCreateCollaborationRequestData toGrpcCreateCollaborationRequestData(CollaborationRequest request); @Mapping(target = "id", expression = "java(toCollaborationRequestId(getStringProperty(CollaborationRequest.PROPERTY_ID, item.getItem())))") @Mapping(target = "collaborationLevel", expression = "java(getIntProperty(CollaborationRequest.PROPERTY_COLLABORATION_LEVEL, item.getItem()))") @@ -141,14 +141,22 @@ public interface CollaborationRequestMapper { @Mapping(target = "createdBy", expression = "java(getStringProperty(CollaborationRequest.PROPERTY_CREATED_BY, item.getItem()))") @Mapping(target = "beschreibung", expression = "java(getStringProperty(CollaborationRequest.PROPERTY_BESCHREIBUNG, item.getItem()))") @Mapping(target = "titel", expression = "java(getStringProperty(CollaborationRequest.PROPERTY_TITEL, item.getItem()))") - @Mapping(target = "zustaendigeStelle", expression = "java(getStringProperty(CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, item.getItem()))") - CollaborationRequest mapFromVorgangAttachedItem(VorgangAttachedItem item); + @Mapping(target = "zustaendigeStelle", expression = "java(getZustaendigeStelleFromItemMap(item.getItem()))") + public abstract CollaborationRequest mapFromVorgangAttachedItem(VorgangAttachedItem item); - default CollaborationRequestId toCollaborationRequestId(String id) { + CollaborationRequestId toCollaborationRequestId(String id) { return CollaborationRequestId.from(id); } - default int getIntProperty(String key, Map<String, Object> propertyMap) { + Fachstelle getZustaendigeStelleFromItemMap(Map<String, Object> propertyMap) { + return fachstelleMapper.fromMap(MapUtils.getMap(propertyMap, CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE)); + } + + int getIntProperty(String key, Map<String, Object> propertyMap) { return MapUtils.getIntValue(propertyMap, key); } + + String getStringProperty(String key, Map<String, Object> propertyMap) { + return MapUtils.getString(propertyMap, key); + } } diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java index ba4460a230898252854fdf2a6087c36ad999bf1d..7e1aeb059f55ed810e66d716db1066cf43f1448b 100644 --- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java @@ -89,10 +89,6 @@ public class CollaborationService { commandService.addSubCommands(buildCreateCollaborationRequestRequest(enrichedRequest)); } - String getUserId() { - return userProfileService.getUserProfile().getId().toString(); - } - OzgCloudCreateSubCommandsRequest buildCreateCollaborationRequestRequest(CollaborationRequest request) { return OzgCloudCreateSubCommandsRequest.builder() .parentId(request.getCommandId()) @@ -116,6 +112,10 @@ public class CollaborationService { return request.toBuilder().collaborationVorgangId(collaborationVorgangId).createdBy(getUserId()).build(); } + String getUserId() { + return userProfileService.getUserProfile().getId().toString(); + } + OzgCloudCreateSubCommandsRequest buildCreateSubCommandsRequest(CollaborationRequest collaborationRequest, List<OzgCloudCommand> subCommands) { return OzgCloudCreateSubCommandsRequest.builder() .parentId(collaborationRequest.getCommandId()) @@ -132,7 +132,7 @@ public class CollaborationService { } OzgCloudCommand buildSendPostfachNachrichtCommand(CollaborationRequest collaborationRequest) { - var bodyObject = buildPostfachSendNachrichtCommandBody(buildMukPostfachAddress(collaborationRequest.getZustaendigeStelle()), + var bodyObject = buildPostfachSendNachrichtCommandBody(buildMukPostfachAddress(collaborationRequest.getZustaendigeStelle().getSubjectId()), collaborationRequest.getVorgangId()); return OzgCloudCommand.builder() .vorgangId(commandMapper.toOzgCloudVorgangId(collaborationRequest.getVorgangId())) diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/fachstelle/Fachstelle.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/fachstelle/Fachstelle.java new file mode 100644 index 0000000000000000000000000000000000000000..f4262522dc8ebb7c890a843b286853325350a70f --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/fachstelle/Fachstelle.java @@ -0,0 +1,29 @@ +package de.ozgcloud.collaboration.fachstelle; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Builder +@Getter +@EqualsAndHashCode +public class Fachstelle { + + public static final String PROPERTY_TECHNICAL_ID = "technicalId"; + public static final String PROPERTY_SUBJECT_ID = "subjectId"; + public static final String PROPERTY_TYPE = "type"; + + @NotBlank + private String technicalId; + @NotBlank + private String subjectId; + @NotNull + private FachstelleType type; + + public enum FachstelleType { + EXTERNE_FACHSTELLE, ORGANISATION_EINHEIT; + } +} diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/fachstelle/FachstelleMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/fachstelle/FachstelleMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..72cafa1305ac51274ea516c3f599b23de078648b --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/fachstelle/FachstelleMapper.java @@ -0,0 +1,48 @@ +package de.ozgcloud.collaboration.fachstelle; + +import java.util.Map; + +import org.apache.commons.collections.MapUtils; +import org.mapstruct.AnnotateWith; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.NullValuePropertyMappingStrategy; +import org.mapstruct.ReportingPolicy; +import org.springframework.stereotype.Component; + +import de.ozgcloud.collaboration.CollaborationManagerConfiguration; +import de.ozgcloud.collaboration.fachstelle.Fachstelle.FachstelleType; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelle; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, // + imports = FachstelleType.class) +@AnnotateWith(value = Component.class, elements = @AnnotateWith.Element(strings = CollaborationManagerConfiguration.FACHSTELLE_MAPPER_NAME)) +public interface FachstelleMapper { + + @Mapping(target = "technicalId", source = "id") + @Mapping(target = "subjectId", source = "mukId") + @Mapping(target = "type", expression = "java(FachstelleType.EXTERNE_FACHSTELLE)") + Fachstelle fromExterneFachstelle(GrpcFachstelle externeFachstelle); + + @Mapping(target = "technicalId", source = "id") + @Mapping(target = "subjectId", source = "xzufiId.id") + @Mapping(target = "type", expression = "java(FachstelleType.ORGANISATION_EINHEIT)") + Fachstelle fromOrganisationEinheit(GrpcOrganisationsEinheit organisationsEinheit); + + default Map<String, Object> toMap(Fachstelle fachstelle) { + return Map.of( + Fachstelle.PROPERTY_TECHNICAL_ID, fachstelle.getTechnicalId(), + Fachstelle.PROPERTY_SUBJECT_ID, fachstelle.getSubjectId(), + Fachstelle.PROPERTY_TYPE, fachstelle.getType().name()); + } + + default Fachstelle fromMap(Map<?, ?> fachstelleMap) { + return Fachstelle.builder() + .technicalId(MapUtils.getString(fachstelleMap, Fachstelle.PROPERTY_TECHNICAL_ID)) + .subjectId(MapUtils.getString(fachstelleMap, Fachstelle.PROPERTY_SUBJECT_ID)) + .type(FachstelleType.valueOf(MapUtils.getString(fachstelleMap, Fachstelle.PROPERTY_TYPE))) + .build(); + } +} diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/fachstelle/FachstelleRemoteService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/fachstelle/FachstelleRemoteService.java new file mode 100644 index 0000000000000000000000000000000000000000..b49627ac5bb16ba916243fec990951f4bf33105c --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/fachstelle/FachstelleRemoteService.java @@ -0,0 +1,47 @@ +package de.ozgcloud.collaboration.fachstelle; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +import de.ozgcloud.collaboration.CollaborationManagerConfiguration; +import de.ozgcloud.collaboration.common.callcontext.CollaborationManagerCallContextGrpcClientInterceptor; +import de.ozgcloud.zufi.grpc.fachstelle.FachstelleServiceGrpc.FachstelleServiceBlockingStub; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetRequest; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetRequest; +import de.ozgcloud.zufi.grpc.organisationseinheit.OrganisationsEinheitServiceGrpc.OrganisationsEinheitServiceBlockingStub; +import lombok.RequiredArgsConstructor; +import net.devh.boot.grpc.client.inject.GrpcClient; + +@Service +@RequiredArgsConstructor +class FachstelleRemoteService { + + @GrpcClient(CollaborationManagerConfiguration.GRPC_ZUFI_MANAGER_NAME) + private final FachstelleServiceBlockingStub fachstelleServiceBlockingStub; + @GrpcClient(CollaborationManagerConfiguration.GRPC_ZUFI_MANAGER_NAME) + private final OrganisationsEinheitServiceBlockingStub organisationsEinheitServiceBlockingStub; + @Qualifier(CollaborationManagerConfiguration.FACHSTELLE_MAPPER_NAME) // NOSONAR + private final FachstelleMapper fachstelleMapper; + @Qualifier(CollaborationManagerConfiguration.CALL_CONTEXT_INTERCEPTOR_NAME) // NOSONAR + private final CollaborationManagerCallContextGrpcClientInterceptor callContextInterceptor; + + public Fachstelle getExterneFachstelle(String id) { + var externeFachstelle = getFachstelleServiceBlockingStub().getById(GrpcFachstelleGetRequest.newBuilder().setId(id).build()).getFachstelle(); + return fachstelleMapper.fromExterneFachstelle(externeFachstelle); + } + + FachstelleServiceBlockingStub getFachstelleServiceBlockingStub() { + return fachstelleServiceBlockingStub.withInterceptors(callContextInterceptor); + } + + public Fachstelle getOrganisationEinheit(String id) { + var organisationEinheit = getOrganisationsEinheitServiceBlockingStub() + .getById(GrpcOrganisationsEinheitGetRequest.newBuilder().setId(id).build()) + .getOrganisationsEinheit(); + return fachstelleMapper.fromOrganisationEinheit(organisationEinheit); + } + + public OrganisationsEinheitServiceBlockingStub getOrganisationsEinheitServiceBlockingStub() { + return organisationsEinheitServiceBlockingStub.withInterceptors(callContextInterceptor); + } +} diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/fachstelle/FachstelleService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/fachstelle/FachstelleService.java new file mode 100644 index 0000000000000000000000000000000000000000..1651b44170f43d17dca87271b50232b3311eb105 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/fachstelle/FachstelleService.java @@ -0,0 +1,20 @@ +package de.ozgcloud.collaboration.fachstelle; + +import org.springframework.stereotype.Service; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class FachstelleService { + + private final FachstelleRemoteService remoteService; + + public Fachstelle getOrganisationEinheit(String technicalId) { + return remoteService.getOrganisationEinheit(technicalId); + } + + public Fachstelle getExterneFachstelle(String technicalId) { + return remoteService.getExterneFachstelle(technicalId); + } +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationEventListenerTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationEventListenerTest.java index 86f085a55b7744711243001ca66abaf71dbba8ef..55c3bf4ef89d0700d5c7cb6bd8cbf64195797216 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationEventListenerTest.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationEventListenerTest.java @@ -27,6 +27,7 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; +import java.util.Map; import java.util.function.Consumer; import org.junit.jupiter.api.BeforeEach; @@ -44,6 +45,8 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.security.core.context.SecurityContext; import de.ozgcloud.collaboration.common.callcontext.CurrentUserService; +import de.ozgcloud.collaboration.fachstelle.FachstelleService; +import de.ozgcloud.collaboration.fachstelle.FachstelleTestFactory; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandCreatedEventTestFactory; import de.ozgcloud.command.CommandFailedEvent; @@ -62,6 +65,8 @@ class CollaborationEventListenerTest { @Mock private CollaborationService collaborationService; @Mock + private FachstelleService fachstelleService; + @Mock private CollaborationRequestMapper commandMapper; @Nested @@ -84,7 +89,7 @@ class CollaborationEventListenerTest { } @Nested - class TestCollaborationRequest { + class TestCreateCollaborationRequest { private final Command command = CommandTestFactory.createBuilder().build(); @@ -93,31 +98,31 @@ class CollaborationEventListenerTest { @Test void shouldCallCommandMapper() { - when(commandMapper.toCollaborationRequest(any())).thenReturn(CollaborationRequestTestFactory.create()); + when(commandMapper.toCollaborationRequestExcludingFachstelle(any())).thenReturn(CollaborationRequestTestFactory.create()); eventListener.createCollaborationRequest(command); - verify(commandMapper).toCollaborationRequest(command); + verify(commandMapper).toCollaborationRequestExcludingFachstelle(command); } @Test - void shouldCallCreateCollaborationRequest() { + void shouldCallCreateLevel1CollaborationRequest() { var collaborationRequest = CollaborationRequestTestFactory.create(); - when(commandMapper.toCollaborationRequest(any())).thenReturn(collaborationRequest); + when(commandMapper.toCollaborationRequestExcludingFachstelle(any())).thenReturn(collaborationRequest); eventListener.createCollaborationRequest(command); - verify(collaborationService).createCollaborationRequest(collaborationRequest); + verify(eventListener).createLevel1CollaborationRequest(collaborationRequest, command); } @Test - void shouldCallCreateFachstellenBeteiligungRequest() { + void shouldCallCreateLevel4CollaborationRequest() { var collaborationRequest = CollaborationRequestTestFactory.createBuilder().collaborationLevel(4).build(); - when(commandMapper.toCollaborationRequest(any())).thenReturn(collaborationRequest); + when(commandMapper.toCollaborationRequestExcludingFachstelle(any())).thenReturn(collaborationRequest); eventListener.createCollaborationRequest(command); - verify(collaborationService).createFachstellenBeteiligungRequest(collaborationRequest); + verify(eventListener).createLevel4CollaborationRequest(collaborationRequest, command); } @DisplayName("should decline request") @@ -125,7 +130,7 @@ class CollaborationEventListenerTest { @ValueSource(ints = { 0, 2, 3, 5 }) void shouldDeclineRequest(int collaborationLevel) { var collaborationRequest = CollaborationRequestTestFactory.createBuilder().collaborationLevel(collaborationLevel).build(); - when(commandMapper.toCollaborationRequest(any())).thenReturn(collaborationRequest); + when(commandMapper.toCollaborationRequestExcludingFachstelle(any())).thenReturn(collaborationRequest); eventListener.createCollaborationRequest(command); @@ -134,6 +139,86 @@ class CollaborationEventListenerTest { } } + @Nested + class TestCreateLevel1CollaborationRequest { + + private final Map<String, Object> bodyObject = Map.of( + CollaborationRequest.PROPERTY_TITEL, CollaborationRequestTestFactory.TITEL, + CollaborationRequest.PROPERTY_BESCHREIBUNG, CollaborationRequestTestFactory.BESCHREIBUNG, + CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, FachstelleTestFactory.TECHNICAL_ID, + CollaborationRequest.PROPERTY_COLLABORATION_LEVEL, CollaborationRequestTestFactory.COLLABORATION_LEVEL); + private final Command command = CommandTestFactory.createBuilder() + .bodyObject(bodyObject) + .build(); + private final CollaborationRequest collaborationRequest = CollaborationRequestTestFactory.createBuilder() + .zustaendigeStelle(null) + .build(); + + @Captor + private ArgumentCaptor<CollaborationRequest> collaborationRequestCaptor; + + @Test + void shouldCallFachstelleService() { + createLevel1CollaborationRequest(); + + verify(fachstelleService).getOrganisationEinheit(FachstelleTestFactory.TECHNICAL_ID); + } + + @Test + void shouldCallCreateCollaborationRequest() { + when(fachstelleService.getOrganisationEinheit(any())).thenReturn(CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE); + + createLevel1CollaborationRequest(); + + verify(collaborationService).createCollaborationRequest(collaborationRequestCaptor.capture()); + assertThat(collaborationRequestCaptor.getValue()).usingRecursiveComparison().isEqualTo(CollaborationRequestTestFactory.create()); + } + + private void createLevel1CollaborationRequest() { + eventListener.createLevel1CollaborationRequest(collaborationRequest, command); + } + } + + @Nested + class TestCreateLevel4CollaborationRequest { + + private final Map<String, Object> bodyObject = Map.of( + CollaborationRequest.PROPERTY_TITEL, CollaborationRequestTestFactory.TITEL, + CollaborationRequest.PROPERTY_BESCHREIBUNG, CollaborationRequestTestFactory.BESCHREIBUNG, + CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, FachstelleTestFactory.TECHNICAL_ID, + CollaborationRequest.PROPERTY_COLLABORATION_LEVEL, CollaborationRequestTestFactory.COLLABORATION_LEVEL); + private final Command command = CommandTestFactory.createBuilder() + .bodyObject(bodyObject) + .build(); + private final CollaborationRequest collaborationRequest = CollaborationRequestTestFactory.createBuilder() + .zustaendigeStelle(null) + .build(); + + @Captor + private ArgumentCaptor<CollaborationRequest> collaborationRequestCaptor; + + @Test + void shouldCallFachstelleService() { + createLevel4CollaborationRequest(); + + verify(fachstelleService).getExterneFachstelle(FachstelleTestFactory.TECHNICAL_ID); + } + + @Test + void shouldCallCreateFachstellenBeteiligungRequest() { + when(fachstelleService.getExterneFachstelle(any())).thenReturn(CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE); + + createLevel4CollaborationRequest(); + + verify(collaborationService).createFachstellenBeteiligungRequest(collaborationRequestCaptor.capture()); + assertThat(collaborationRequestCaptor.getValue()).usingRecursiveComparison().isEqualTo(CollaborationRequestTestFactory.create()); + } + + private void createLevel4CollaborationRequest() { + eventListener.createLevel4CollaborationRequest(collaborationRequest, command); + } + } + @Nested class TestRunWithSecurityContext { diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationRequestMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationRequestMapperTest.java index afd2e169858f290758dbef4d7d724d48d60c2edf..5d0d748f3b327c79d08df8d13c6ee76b89620ca2 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationRequestMapperTest.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationRequestMapperTest.java @@ -44,7 +44,13 @@ import de.ozgcloud.apilib.common.datatypes.GenericId; import de.ozgcloud.apilib.user.OzgCloudUserId; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; import de.ozgcloud.collaboration.common.callcontext.CollaborationManagerCallContextGrpcClientInterceptor; +import de.ozgcloud.collaboration.common.vorgang.attached_item.VorgangAttachedItem; import de.ozgcloud.collaboration.common.vorgang.attached_item.VorgangAttachedItemTestFactory; +import de.ozgcloud.collaboration.fachstelle.FachstelleMapper; +import de.ozgcloud.collaboration.fachstelle.FachstelleService; +import de.ozgcloud.collaboration.fachstelle.FachstelleTestFactory; +import de.ozgcloud.collaboration.request.GrpcCreateCollaborationRequestDataTestFactory; +import de.ozgcloud.collaboration.vorgang.GrpcCollaborationRequestTestFactory; import de.ozgcloud.collaboration.vorgang.VorgangTestFactory; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandTestFactory; @@ -58,23 +64,30 @@ class CollaborationRequestMapperTest { @Mock private CommandMapper commandMapper; + @Mock + private FachstelleService fachstelleService; + @Mock + private FachstelleMapper fachstelleMapper; @Nested - class TestToCreateCollaborationRequest { + class TestToCollaborationRequestExcludingFachstelle { + private static final Map<String, Object> BODY_OBJECT = Map.of( + CollaborationRequest.PROPERTY_TITEL, CollaborationRequestTestFactory.TITEL, + CollaborationRequest.PROPERTY_BESCHREIBUNG, CollaborationRequestTestFactory.BESCHREIBUNG, + CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, FachstelleTestFactory.TECHNICAL_ID, + CollaborationRequest.PROPERTY_COLLABORATION_LEVEL, CollaborationRequestTestFactory.COLLABORATION_LEVEL); private static final Command COMMAND = CommandTestFactory.createBuilder().bodyObject( - Map.of( - CollaborationRequest.PROPERTY_TITEL, CollaborationRequestTestFactory.TITEL, - CollaborationRequest.PROPERTY_BESCHREIBUNG, CollaborationRequestTestFactory.BESCHREIBUNG, - CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE)) + BODY_OBJECT) + .vorgangId(VorgangTestFactory.ID_STR) .build(); @Test void shouldMapCommand() { - var result = mapper.toCollaborationRequest(COMMAND); + var result = mapper.toCollaborationRequestExcludingFachstelle(COMMAND); assertThat(result).usingRecursiveComparison() - .ignoringFields("id", "createdBy", "vorgangId", "commandId", "collaborationVorgangId", "collaborationLevel", "createdBy") + .ignoringFields("id", "createdBy", "collaborationVorgangId", "zustaendigeStelle") .isEqualTo(CollaborationRequestTestFactory.create()); } } @@ -231,11 +244,21 @@ class CollaborationRequestMapperTest { assertThat(result).containsEntry(CollaborationRequest.PROPERTY_BESCHREIBUNG, CollaborationRequestTestFactory.BESCHREIBUNG); } + @Test + void shouldCallFachstelleMapper() { + toItemMap(); + + verify(fachstelleMapper).toMap(CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE); + } + @Test void shouldSetZustaendigeStelle() { + var fachstelleMap = FachstelleTestFactory.createAsMap(); + when(fachstelleMapper.toMap(CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE)).thenReturn(fachstelleMap); + var result = toItemMap(); - assertThat(result).containsEntry(CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE); + assertThat(result).containsEntry(CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, fachstelleMap); } @Test @@ -261,17 +284,80 @@ class CollaborationRequestMapperTest { @DisplayName("Map from vorgangAttachedItem") @Nested class TestMapFromVorgangAttachedItem { + private static final Map<String, Object> COLLABORATION_REQUEST_MAP = CollaborationRequestTestFactory.createAsMap(); + private static final VorgangAttachedItem VORGANG_ATTACHED_ITEM = VorgangAttachedItemTestFactory.createBuilder() + .itemName("CollaborationRequest") + .item(COLLABORATION_REQUEST_MAP) + .build(); + + @Test + void shouldCallGetZustaendigeStelleFromItemMap() { + mapper.mapFromVorgangAttachedItem(VORGANG_ATTACHED_ITEM); + + verify(mapper).getZustaendigeStelleFromItemMap(COLLABORATION_REQUEST_MAP); + } @Test void shouldMap() { - var vorgangAttachedItem = VorgangAttachedItemTestFactory.createBuilder() - .itemName("CollaborationRequest") - .item(CollaborationRequestTestFactory.createAsMap()) - .build(); + doReturn(FachstelleTestFactory.create()).when(mapper).getZustaendigeStelleFromItemMap(any()); - var item = mapper.mapFromVorgangAttachedItem(vorgangAttachedItem); + var item = mapper.mapFromVorgangAttachedItem(VORGANG_ATTACHED_ITEM); assertThat(item).usingRecursiveComparison().isEqualTo(CollaborationRequestTestFactory.create()); } } + + @Nested + class TestGetZustaendigeStelleFromItemMap { + + private final Map<String, Object> itemMap = CollaborationRequestTestFactory.createAsMap(); + + @Test + void shouldMapFachstelle() { + mapper.getZustaendigeStelleFromItemMap(itemMap); + + verify(fachstelleMapper).fromMap(CollaborationRequestTestFactory.FACHSTELLE_MAP); + } + + @Test + void shouldReturnFachstelle() { + var expectedFachstelle = FachstelleTestFactory.create(); + when(fachstelleMapper.fromMap(any())).thenReturn(expectedFachstelle); + + var actualFachstelle = mapper.getZustaendigeStelleFromItemMap(itemMap); + + assertThat(actualFachstelle).isSameAs(expectedFachstelle); + } + } + + @Nested + class TestToGrpcCollaborationRequest { + + @BeforeEach + void callCommandMapper() { + when(commandMapper.valueToString(any())).thenCallRealMethod(); + } + + @Test + void shouldMap() { + var request = mapper.toGrpcCollaborationRequest(CollaborationRequestTestFactory.create()); + + assertThat(request).isEqualTo(GrpcCollaborationRequestTestFactory.create()); + } + } + + @Nested + class TestToGrpcCreateCollaborationRequestData { + + @Test + void shouldMap() { + var expectedRequestData = GrpcCreateCollaborationRequestDataTestFactory.createBuilder() + .setVorgangId(VorgangTestFactory.ID_STR) + .build(); + + var requestData = mapper.toGrpcCreateCollaborationRequestData(CollaborationRequestTestFactory.create()); + + assertThat(requestData).isEqualTo(expectedRequestData); + } + } } \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationRequestTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationRequestTestFactory.java index 4ffe6eb856eb025a2eb1f60c42e75666cdd25771..0d876d921b9ca47011a2c46ec934b4be2bdd2dae 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationRequestTestFactory.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationRequestTestFactory.java @@ -29,6 +29,8 @@ import java.util.UUID; import com.thedeanda.lorem.LoremIpsum; import de.ozgcloud.collaboration.CollaborationRequest.CollaborationRequestBuilder; +import de.ozgcloud.collaboration.fachstelle.Fachstelle; +import de.ozgcloud.collaboration.fachstelle.FachstelleTestFactory; import de.ozgcloud.collaboration.request.CollaborationRequestId; import de.ozgcloud.collaboration.vorgang.VorgangTestFactory; import de.ozgcloud.command.CommandTestFactory; @@ -40,9 +42,10 @@ public class CollaborationRequestTestFactory { public static final String TITEL = LoremIpsum.getInstance().getWords(5); public static final String BESCHREIBUNG = LoremIpsum.getInstance().getWords(10); - public static final String ZUSTAENDIGE_STELLE = UUID.randomUUID().toString(); public static final String COLLABORATION_VORGANG_ID = UUID.randomUUID().toString(); public static final int COLLABORATION_LEVEL = 1; + public static final Fachstelle ZUSTAENDIGE_STELLE = FachstelleTestFactory.create(); + public static final Map<String, Object> FACHSTELLE_MAP = FachstelleTestFactory.createAsMap(); public static CollaborationRequest create() { return createBuilder().build(); @@ -71,6 +74,6 @@ public class CollaborationRequestTestFactory { CollaborationRequest.PROPERTY_CREATED_BY, CommandTestFactory.CREATED_BY, CollaborationRequest.PROPERTY_TITEL, TITEL, CollaborationRequest.PROPERTY_BESCHREIBUNG, BESCHREIBUNG, - CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, ZUSTAENDIGE_STELLE); + CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, FACHSTELLE_MAP); } } diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceITCase.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceITCase.java index 1d0867baad9d780b636d5421070b7f824fe0f11f..6247874836a4658180c4ca9f01a4c2e44d229578 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceITCase.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceITCase.java @@ -30,12 +30,14 @@ import jakarta.validation.ConstraintViolationException; import org.apache.commons.lang3.StringUtils; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.NullAndEmptySource; import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; +import de.ozgcloud.collaboration.fachstelle.FachstelleTestFactory; import de.ozgcloud.common.test.ITCase; @ITCase @@ -68,12 +70,46 @@ class CollaborationServiceITCase { assertThrows(ConstraintViolationException.class, () -> service.createCollaborationRequest(request)); } - @DisplayName("should validate zustaendigeStelle") - @ParameterizedTest(name = "fail when zustaendigeStelle: \"{0}\"") + @DisplayName("should validate technicalId of zustaendigeStelle") + @ParameterizedTest(name = "fail when technicalId: \"{0}\"") + @NullAndEmptySource + @ValueSource(strings = { StringUtils.SPACE }) + void shouldValidateCollaborationZustaendigeStelleTechnicalId(String technicalId) { + var request = CollaborationRequestTestFactory.createBuilder() + .zustaendigeStelle(FachstelleTestFactory.createBuilder().technicalId(technicalId).build()) + .build(); + + assertThrows(ConstraintViolationException.class, () -> service.createCollaborationRequest(request)); + } + + @DisplayName("should validate subjectId of zustaendigeStelle") + @ParameterizedTest(name = "fail when subjectId: \"{0}\"") @NullAndEmptySource @ValueSource(strings = { StringUtils.SPACE }) - void shouldValidateCollaborationRequestTitel(String zustaendigeStelle) { - var request = CollaborationRequestTestFactory.createBuilder().zustaendigeStelle(zustaendigeStelle).build(); + void shouldValidateCollaborationZustaendigeStelleSubjectId(String subjectId) { + var request = CollaborationRequestTestFactory.createBuilder() + .zustaendigeStelle(FachstelleTestFactory.createBuilder().subjectId(subjectId).build()) + .build(); + + assertThrows(ConstraintViolationException.class, () -> service.createCollaborationRequest(request)); + } + + @DisplayName("should validate type of zustaendigeStelle") + @Test + void shouldValidateCollaborationZustaendigeStelleType() { + var request = CollaborationRequestTestFactory.createBuilder() + .zustaendigeStelle(FachstelleTestFactory.createBuilder().type(null).build()) + .build(); + + assertThrows(ConstraintViolationException.class, () -> service.createCollaborationRequest(request)); + } + + @DisplayName("should validate zustaendigeStelle") + @Test + void shouldValidateCollaborationZustaendigeStelle() { + var request = CollaborationRequestTestFactory.createBuilder() + .zustaendigeStelle(null) + .build(); assertThrows(ConstraintViolationException.class, () -> service.createCollaborationRequest(request)); } @@ -92,22 +128,26 @@ class CollaborationServiceITCase { assertThrows(ConstraintViolationException.class, () -> service.createFachstellenBeteiligungRequest(request)); } - @DisplayName("validate beschreibung") - @ParameterizedTest(name = "should throw exception on beschreibung: \"{0}\"") + @DisplayName("should validate technicalId of zustaendigeStelle") + @ParameterizedTest(name = "fail when technicalId: \"{0}\"") @NullAndEmptySource @ValueSource(strings = { StringUtils.SPACE }) - void shouldValidateBeschreibung(String beschreibung) { - var request = CollaborationRequestTestFactory.createBuilder().beschreibung(beschreibung).build(); + void shouldValidateCollaborationZustaendigeStelleTechnicalId(String technicalId) { + var request = CollaborationRequestTestFactory.createBuilder() + .zustaendigeStelle(FachstelleTestFactory.createBuilder().technicalId(technicalId).build()) + .build(); assertThrows(ConstraintViolationException.class, () -> service.createFachstellenBeteiligungRequest(request)); } - @DisplayName("validate zustaendigeStelle") - @ParameterizedTest(name = "should throw exception oon zustaendigeStelle: \"{0}\"") + @DisplayName("should validate zustaendigeStelle") + @ParameterizedTest(name = "fail when subjectId: \"{0}\"") @NullAndEmptySource @ValueSource(strings = { StringUtils.SPACE }) - void shouldValidateCollaborationRequestTitel(String zustaendigeStelle) { - var request = CollaborationRequestTestFactory.createBuilder().zustaendigeStelle(zustaendigeStelle).build(); + void shouldValidateCollaborationZustaendigeStelleSubjectId(String subjectId) { + var request = CollaborationRequestTestFactory.createBuilder() + .zustaendigeStelle(FachstelleTestFactory.createBuilder().subjectId(subjectId).build()) + .build(); assertThrows(ConstraintViolationException.class, () -> service.createFachstellenBeteiligungRequest(request)); } diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java index 7b65d713753f128862cde95d7529c4bc5ddfc243..b0b742110a3a90d3084d26256834c805f94a4c04 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java @@ -24,6 +24,7 @@ package de.ozgcloud.collaboration; import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.InstanceOfAssertFactories.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -53,9 +54,8 @@ import de.ozgcloud.collaboration.common.freemarker.TemplateHandler; import de.ozgcloud.collaboration.common.user.UserId; import de.ozgcloud.collaboration.common.user.UserProfile; import de.ozgcloud.collaboration.common.user.UserProfileService; -import de.ozgcloud.collaboration.vorgang.PostfachAddressTestFactory; +import de.ozgcloud.collaboration.fachstelle.FachstelleTestFactory; import de.ozgcloud.collaboration.vorgang.ServiceKonto; -import de.ozgcloud.collaboration.vorgang.ServiceKontoTestFactory; import de.ozgcloud.collaboration.vorgang.Vorgang; import de.ozgcloud.collaboration.vorgang.VorgangService; import de.ozgcloud.collaboration.vorgang.VorgangTestFactory; @@ -410,8 +410,6 @@ class CollaborationServiceTest { class TestBuildSendPostfachNachrichtCommand { private static final CollaborationRequest COLLABORATION_REQUEST = CollaborationRequestTestFactory.create(); - private static final ServiceKonto.PostfachAddress POSTFACH_ADDRESS = PostfachAddressTestFactory.create(); - private static final ServiceKonto SERVICE_KONTO = ServiceKontoTestFactory.createBuilder().clearAddresses().address(POSTFACH_ADDRESS).build(); private static final OzgCloudUserId OZG_CLOUD_ID = OzgCloudUserId.from(CommandTestFactory.CREATED_BY); private static final Map<String, Object> OBJECT_MAP = Map.of("key", "value"); private static final OzgCloudVorgangId VORGANG_ID = OzgCloudVorgangId.from(VorgangTestFactory.ID.toString()); @@ -429,7 +427,7 @@ class CollaborationServiceTest { void shouldCallBuildPostfachAddress() { buildSendPostfachNachrichtCommand(); - verify(service).buildMukPostfachAddress(CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE); + verify(service).buildMukPostfachAddress(FachstelleTestFactory.SUBJECT_ID); } @Test @@ -525,7 +523,7 @@ class CollaborationServiceTest { var result = buildPostfachAddress(); assertThat(result).extracting(ServiceKonto.PostfachAddress.FIELD_IDENTIFIER, MAP) - .containsEntry(ServiceKonto.PostfachAddress.FIELD_IDENTIFIER_POSTFACH_ID, CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE); + .containsEntry(ServiceKonto.PostfachAddress.FIELD_IDENTIFIER_POSTFACH_ID, FachstelleTestFactory.SUBJECT_ID); } @Test @@ -536,7 +534,7 @@ class CollaborationServiceTest { } private Map<String, Object> buildPostfachAddress() { - return service.buildMukPostfachAddress(CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE); + return service.buildMukPostfachAddress(FachstelleTestFactory.SUBJECT_ID); } } diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/FachstelleMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/FachstelleMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..21a0c986d85fdd4c7eab2ebc4e93f2a2cdee5ceb --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/FachstelleMapperTest.java @@ -0,0 +1,64 @@ +package de.ozgcloud.collaboration.fachstelle; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +import de.ozgcloud.collaboration.fachstelle.Fachstelle.FachstelleType; + +class FachstelleMapperTest { + + private final FachstelleMapper mapper = Mappers.getMapper(FachstelleMapper.class); + + @Nested + class TestFromExterneFachstelle { + + @Test + void shouldMapToFachstelle() { + var expectedFachstelle = FachstelleTestFactory.createBuilder().type(FachstelleType.EXTERNE_FACHSTELLE).build(); + + var fachstelle = mapper.fromExterneFachstelle(GrpcFachstelleTestFactory.create()); + + assertThat(fachstelle).usingRecursiveComparison().isEqualTo(expectedFachstelle); + } + } + + @Nested + class TestFromOrganisationEinheit { + + @Test + void shouldMapToFachstelle() { + var expectedFachstelle = FachstelleTestFactory.createBuilder().type(FachstelleType.ORGANISATION_EINHEIT).build(); + + var fachstelle = mapper.fromOrganisationEinheit(GrpcOrganisationsEinheitTestFactory.create()); + + assertThat(fachstelle).usingRecursiveComparison().isEqualTo(expectedFachstelle); + } + } + + @Nested + class TestToMap { + + @Test + void shouldMapToFachstelleMap() { + var expectedMap = FachstelleTestFactory.createAsMap(); + + var actualMap = mapper.toMap(FachstelleTestFactory.create()); + + assertThat(actualMap).usingRecursiveComparison().isEqualTo(expectedMap); + } + } + + @Nested + class TestFromMap { + + @Test + void shouldMapToFachstelle() { + var fachstelle = mapper.fromMap(FachstelleTestFactory.createAsMap()); + + assertThat(fachstelle).isEqualTo(FachstelleTestFactory.create()); + } + } +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/FachstelleRemoteServiceTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/FachstelleRemoteServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..aabed17d360a95a00a3baeee64328bda1c746eab --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/FachstelleRemoteServiceTest.java @@ -0,0 +1,175 @@ +package de.ozgcloud.collaboration.fachstelle; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +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.collaboration.common.callcontext.CollaborationManagerCallContextGrpcClientInterceptor; +import de.ozgcloud.zufi.grpc.fachstelle.FachstelleServiceGrpc.FachstelleServiceBlockingStub; +import de.ozgcloud.zufi.grpc.organisationseinheit.OrganisationsEinheitServiceGrpc.OrganisationsEinheitServiceBlockingStub; + +class FachstelleRemoteServiceTest { + + @Spy + @InjectMocks + private FachstelleRemoteService service; + + @Mock + private FachstelleServiceBlockingStub fachstelleServiceBlockingStub; + @Mock + private OrganisationsEinheitServiceBlockingStub organisationsEinheitServiceBlockingStub; + @Mock + private FachstelleMapper fachstelleMapper; + @Mock + private CollaborationManagerCallContextGrpcClientInterceptor callContextInterceptor; + + @Nested + class TestGetExterneFachstelle { + + @Mock + private FachstelleServiceBlockingStub fachstelleServiceBlockingStubWithInterceptor; + + @BeforeEach + void mock() { + doReturn(fachstelleServiceBlockingStubWithInterceptor).when(service).getFachstelleServiceBlockingStub(); + when(fachstelleServiceBlockingStubWithInterceptor.getById(any())).thenReturn(GrpcFachstelleGetResponseTestFactory.create()); + } + + @Test + void shouldCallGetFachstelleServiceBlockingStub() { + getExterneFachstelle(); + + verify(service).getFachstelleServiceBlockingStub(); + } + + @Test + void shouldCallFachstelleServiceBlockingStub() { + getExterneFachstelle(); + + verify(fachstelleServiceBlockingStubWithInterceptor).getById(GrpcFachstelleGetRequestTestFactory.create()); + } + + @Test + void shouldCallFachstelleMapper() { + getExterneFachstelle(); + + verify(fachstelleMapper).fromExterneFachstelle(GrpcFachstelleGetResponseTestFactory.EXTERNE_FACHSTELLE); + } + + @Test + void shouldReturnFachstelle() { + var expectedFachstelle = FachstelleTestFactory.create(); + when(fachstelleMapper.fromExterneFachstelle(any())).thenReturn(expectedFachstelle); + + var returnFachstelle = getExterneFachstelle(); + + assertThat(returnFachstelle).isSameAs(expectedFachstelle); + } + + private Fachstelle getExterneFachstelle() { + return service.getExterneFachstelle(FachstelleTestFactory.TECHNICAL_ID); + } + } + + @Nested + class TestGetFachstelleServiceBlockingStub { + + @Mock + private FachstelleServiceBlockingStub fachstelleServiceBlockingStubWithInterceptor; + + @Test + void shouldAttachInterceptor() { + service.getFachstelleServiceBlockingStub(); + + verify(fachstelleServiceBlockingStub).withInterceptors(callContextInterceptor); + } + + @Test + void shouldReturnStubWithInterceptor() { + when(fachstelleServiceBlockingStub.withInterceptors(any())).thenReturn(fachstelleServiceBlockingStubWithInterceptor); + + var stub = service.getFachstelleServiceBlockingStub(); + + assertThat(stub).isSameAs(fachstelleServiceBlockingStubWithInterceptor); + } + } + + @Nested + class TestGetOrganisationEinheit { + + @Mock + private OrganisationsEinheitServiceBlockingStub organisationsEinheitServiceBlockingStubWithInterceptor; + + @BeforeEach + void mock() { + doReturn(organisationsEinheitServiceBlockingStubWithInterceptor).when(service).getOrganisationsEinheitServiceBlockingStub(); + when(organisationsEinheitServiceBlockingStubWithInterceptor.getById(any())) + .thenReturn(GrpcOrganisationsEinheitGetResponseTestFactory.create()); + } + + @Test + void shouldCallGetOrganisationsEinheitServiceBlockingStub() { + getOrganisationEinheit(); + + verify(service).getOrganisationsEinheitServiceBlockingStub(); + } + + @Test + void shouldCallOrganisationsEinheitServiceBlockingStub() { + getOrganisationEinheit(); + + verify(organisationsEinheitServiceBlockingStubWithInterceptor).getById(GrpcOrganisationsEinheitGetRequestTestFactory.create()); + } + + @Test + void shouldCallFachstelleMapper() { + getOrganisationEinheit(); + + verify(fachstelleMapper).fromOrganisationEinheit(GrpcOrganisationsEinheitGetResponseTestFactory.ORGANISATION_EINHEIT); + } + + @Test + void shouldReturnFachstelle() { + var expectedFachstelle = FachstelleTestFactory.create(); + when(fachstelleMapper.fromOrganisationEinheit(any())).thenReturn(expectedFachstelle); + + var returnFachstelle = getOrganisationEinheit(); + + assertThat(returnFachstelle).isSameAs(expectedFachstelle); + } + + private Fachstelle getOrganisationEinheit() { + return service.getOrganisationEinheit(FachstelleTestFactory.TECHNICAL_ID); + } + } + + @Nested + class TestGetOrganisationsEinheitServiceBlockingStub { + + @Mock + private OrganisationsEinheitServiceBlockingStub organisationsEinheitServiceBlockingStubWithInterceptor; + + @Test + void shouldAttachInterceptor() { + service.getOrganisationsEinheitServiceBlockingStub(); + + verify(organisationsEinheitServiceBlockingStub).withInterceptors(callContextInterceptor); + } + + @Test + void shouldReturnStubWithInterceptor() { + when(organisationsEinheitServiceBlockingStub.withInterceptors(any())).thenReturn(organisationsEinheitServiceBlockingStubWithInterceptor); + + var stub = service.getOrganisationsEinheitServiceBlockingStub(); + + assertThat(stub).isSameAs(organisationsEinheitServiceBlockingStubWithInterceptor); + } + } +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/FachstelleServiceTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/FachstelleServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..7447ac42fc64533f349340c17243bb8929512406 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/FachstelleServiceTest.java @@ -0,0 +1,61 @@ +package de.ozgcloud.collaboration.fachstelle; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +class FachstelleServiceTest { + + @InjectMocks + private FachstelleService service; + + @Mock + private FachstelleRemoteService remoteService; + + @Nested + class TestGetOrganisationEinheit { + + @Test + void shouldGetOrganisationEinheit() { + service.getOrganisationEinheit(FachstelleTestFactory.TECHNICAL_ID); + + verify(remoteService).getOrganisationEinheit(FachstelleTestFactory.TECHNICAL_ID); + } + + @Test + void shouldReturnFachstelle() { + var expectedFachstelle = FachstelleTestFactory.create(); + when(remoteService.getOrganisationEinheit(any())).thenReturn(expectedFachstelle); + + var actualFachstelle = service.getOrganisationEinheit(FachstelleTestFactory.TECHNICAL_ID); + + assertThat(actualFachstelle).isSameAs(expectedFachstelle); + } + } + + @Nested + class TestGetExterneFachstelle { + + @Test + void shouldGetExterneFachstelle() { + service.getExterneFachstelle(FachstelleTestFactory.TECHNICAL_ID); + + verify(remoteService).getExterneFachstelle(FachstelleTestFactory.TECHNICAL_ID); + } + + @Test + void shouldReturnFachstelle() { + var expectedFachstelle = FachstelleTestFactory.create(); + when(remoteService.getExterneFachstelle(any())).thenReturn(expectedFachstelle); + + var actualFachstelle = service.getExterneFachstelle(FachstelleTestFactory.TECHNICAL_ID); + + assertThat(actualFachstelle).isSameAs(expectedFachstelle); + } + } +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/FachstelleTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/FachstelleTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..4376385b28a4cdd1464bdb3ddfbb057255fb0b6c --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/FachstelleTestFactory.java @@ -0,0 +1,32 @@ +package de.ozgcloud.collaboration.fachstelle; + +import java.util.Map; +import java.util.UUID; + +import de.ozgcloud.collaboration.fachstelle.Fachstelle.FachstelleBuilder; +import de.ozgcloud.collaboration.fachstelle.Fachstelle.FachstelleType; + +public class FachstelleTestFactory { + + public static final FachstelleType TYPE = FachstelleType.ORGANISATION_EINHEIT; + public static final String SUBJECT_ID = UUID.randomUUID().toString(); + public static final String TECHNICAL_ID = UUID.randomUUID().toString(); + + public static Fachstelle create() { + return createBuilder().build(); + } + + public static FachstelleBuilder createBuilder() { + return Fachstelle.builder() + .subjectId(SUBJECT_ID) + .technicalId(TECHNICAL_ID) + .type(TYPE); + } + + public static Map<String, Object> createAsMap() { + return Map.of( + Fachstelle.PROPERTY_TECHNICAL_ID, TECHNICAL_ID, + Fachstelle.PROPERTY_SUBJECT_ID, SUBJECT_ID, + Fachstelle.PROPERTY_TYPE, TYPE.name()); + } +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcAnschriftTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcAnschriftTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..4354c8f28e3f30aa9c04633ca6da26820e5ec9ee --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcAnschriftTestFactory.java @@ -0,0 +1,51 @@ +/* + * 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.collaboration.fachstelle; + +import java.util.Random; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcAnschrift; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcAnschrift.Builder; + +public class GrpcAnschriftTestFactory { + public static final String PLZ = LoremIpsum.getInstance().getZipCode(); + public static final String ORT = LoremIpsum.getInstance().getCity(); + public static final String STRASSE = LoremIpsum.getInstance().getWords(2); + public static final String HAUSNUMMER = String.valueOf(new Random().nextInt()); + + public static GrpcAnschrift create() { + return createBuilder().build(); + } + + public static Builder createBuilder() { + return GrpcAnschrift.newBuilder() + .setStrasse(STRASSE) + .setHausnummer(HAUSNUMMER) + .setPlz(PLZ) + .setOrt(ORT); + } + +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcFachstelleGetRequestTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcFachstelleGetRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..d2a90ff0e4a956e355020e684f6bc175e773b9c1 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcFachstelleGetRequestTestFactory.java @@ -0,0 +1,18 @@ +package de.ozgcloud.collaboration.fachstelle; + +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetRequest; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetRequest.Builder; + +public class GrpcFachstelleGetRequestTestFactory { + + private static final String ID = FachstelleTestFactory.TECHNICAL_ID; + + public static GrpcFachstelleGetRequest create() { + return createBuilder().build(); + } + + private static Builder createBuilder() { + return GrpcFachstelleGetRequest.newBuilder().setId(ID); + } + +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcFachstelleGetResponseTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcFachstelleGetResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..e13c2a7cdcd1322dd87ffd8c4a011f881ab5f0ee --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcFachstelleGetResponseTestFactory.java @@ -0,0 +1,20 @@ +package de.ozgcloud.collaboration.fachstelle; + +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelle; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetResponse; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetResponse.Builder; + +public class GrpcFachstelleGetResponseTestFactory { + + public static final GrpcFachstelle EXTERNE_FACHSTELLE = GrpcFachstelleTestFactory.create(); + + public static GrpcFachstelleGetResponse create() { + return createBuilder().build(); + } + + public static Builder createBuilder() { + return GrpcFachstelleGetResponse.newBuilder() + .setFachstelle(EXTERNE_FACHSTELLE); + } + +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcFachstelleTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcFachstelleTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..98ffc3750f717ce3f81f9c3fdb5fd165ec2a32c3 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcFachstelleTestFactory.java @@ -0,0 +1,37 @@ +package de.ozgcloud.collaboration.fachstelle; + +import java.util.UUID; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelle; + +public class GrpcFachstelleTestFactory { + + public static final String MUK_ID = FachstelleTestFactory.SUBJECT_ID; + public static final String ID = FachstelleTestFactory.TECHNICAL_ID; + public static final String FIRMEN_NAME = LoremIpsum.getInstance().getWords(2); + public static final String RECHTSFORM = LoremIpsum.getInstance().getWords(1); + public static final String RECHTSFORM_TEXT = LoremIpsum.getInstance().getWords(1); + public static final String REGISTER_NUMMER = UUID.randomUUID().toString(); + public static final String REGISTER_ART = LoremIpsum.getInstance().getWords(1); + public static final String EMAIL_ADRESSE = LoremIpsum.getInstance().getEmail(); + public static final String ANSCHRIFT = LoremIpsum.getInstance().getWords(5); + + public static GrpcFachstelle create() { + return createBuilder().build(); + } + + public static GrpcFachstelle.Builder createBuilder() { + return GrpcFachstelle.newBuilder() + .setId(ID) + .setMukId(MUK_ID) + .setFirmenName(FIRMEN_NAME) + .setRechtsform(RECHTSFORM) + .setRechtsformText(RECHTSFORM_TEXT) + .setRegisterNummer(REGISTER_NUMMER) + .setRegisterArt(REGISTER_ART) + .setEmailAdresse(EMAIL_ADRESSE) + .setAnschrift(ANSCHRIFT); + } +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcOrganisationsEinheitGetRequestTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcOrganisationsEinheitGetRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..4c6f3f79774f04ea030e78df5ac5d83c6427ddcd --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcOrganisationsEinheitGetRequestTestFactory.java @@ -0,0 +1,18 @@ +package de.ozgcloud.collaboration.fachstelle; + +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetRequest; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetRequest.Builder; + +public class GrpcOrganisationsEinheitGetRequestTestFactory { + + private static final String ID = FachstelleTestFactory.TECHNICAL_ID; + + public static GrpcOrganisationsEinheitGetRequest create() { + return createBuilder().build(); + } + + private static Builder createBuilder() { + return GrpcOrganisationsEinheitGetRequest.newBuilder().setId(ID); + } + +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcOrganisationsEinheitGetResponseTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcOrganisationsEinheitGetResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..238046f6d34d78e1ced02c1e306e0276583a6ebb --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcOrganisationsEinheitGetResponseTestFactory.java @@ -0,0 +1,19 @@ +package de.ozgcloud.collaboration.fachstelle; + +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetResponse; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetResponse.Builder; + +public class GrpcOrganisationsEinheitGetResponseTestFactory { + + public static final GrpcOrganisationsEinheit ORGANISATION_EINHEIT = GrpcOrganisationsEinheitTestFactory.create(); + + public static GrpcOrganisationsEinheitGetResponse create() { + return createBuilder().build(); + } + + public static Builder createBuilder() { + return GrpcOrganisationsEinheitGetResponse.newBuilder().setOrganisationsEinheit(ORGANISATION_EINHEIT); + } + +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcOrganisationsEinheitTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcOrganisationsEinheitTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..e6f2848cd4242a252b3a5635037a04c33c695f0f --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcOrganisationsEinheitTestFactory.java @@ -0,0 +1,41 @@ +package de.ozgcloud.collaboration.fachstelle; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcAnschrift; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit.Builder; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcXzufiId; + +public class GrpcOrganisationsEinheitTestFactory { + public static final String ID = FachstelleTestFactory.TECHNICAL_ID; + public static final GrpcXzufiId XZUFI_ID = GrpcXzufiIdTestFactory.create(); + public static final String NAME = LoremIpsum.getInstance().getName(); + public static final String SYNONYME = LoremIpsum.getInstance().getWords(5); + public static final GrpcAnschrift ANSCHRIFT = GrpcAnschriftTestFactory.create(); + public static final String VORGANG_MANAGER_ADDRESS = LoremIpsum.getInstance().getUrl(); + + public static GrpcOrganisationsEinheit create() { + return createBuilder().build(); + } + + public static GrpcOrganisationsEinheit createWithoutSynonyme() { + return createBuilderWithoutSynonyme() + .build(); + } + + public static Builder createBuilder() { + return createBuilderWithoutSynonyme() + .setSynonyme(SYNONYME); + } + + public static Builder createBuilderWithoutSynonyme() { + return GrpcOrganisationsEinheit.newBuilder() + .setId(ID) + .setName(NAME) + .setAnschrift(ANSCHRIFT) + .setVorgangManagerAddress(VORGANG_MANAGER_ADDRESS) + .setXzufiId(XZUFI_ID); + } + +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcXzufiIdTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcXzufiIdTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..7db7a81ee16567fcf452b73a27c4f9127ce96dda --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/fachstelle/GrpcXzufiIdTestFactory.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.collaboration.fachstelle; + +import java.util.UUID; + +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcXzufiId; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcXzufiId.Builder; + +public class GrpcXzufiIdTestFactory { + public static final String ORGANISATION_EINHEIT_ID = FachstelleTestFactory.SUBJECT_ID; + public static final String SCHEME_AGENCY_ID = UUID.randomUUID().toString(); + + public static GrpcXzufiId create() { + return createBuilder().build(); + } + + public static Builder createBuilder() { + return GrpcXzufiId.newBuilder().setId(ORGANISATION_EINHEIT_ID).setSchemeAgencyId(SCHEME_AGENCY_ID); + } +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/request/GrpcCreateCollaborationRequestDataTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/request/GrpcCreateCollaborationRequestDataTestFactory.java index b9be69c7847ccd054e24e878997e2d92c0d65852..aff2d827416ad7d35b83709999e38bb00daed917 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/request/GrpcCreateCollaborationRequestDataTestFactory.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/request/GrpcCreateCollaborationRequestDataTestFactory.java @@ -1,6 +1,7 @@ package de.ozgcloud.collaboration.request; import de.ozgcloud.collaboration.CollaborationRequestTestFactory; +import de.ozgcloud.collaboration.fachstelle.FachstelleTestFactory; import de.ozgcloud.command.CommandTestFactory; import de.ozgcloud.vorgang.vorgang.GrpcCreateCollaborationRequestData; @@ -14,6 +15,6 @@ public class GrpcCreateCollaborationRequestDataTestFactory { return GrpcCreateCollaborationRequestData.newBuilder() .setCollaborationLevel(CollaborationRequestTestFactory.COLLABORATION_LEVEL) .setVorgangId(CommandTestFactory.VORGANG_ID) - .setZustaendigeStelle(CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE); + .setOrganisationEinheitId(FachstelleTestFactory.SUBJECT_ID); } } \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcCollaborationRequestTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcCollaborationRequestTestFactory.java index a7301e44d37b857b89b83f45ca95ad15717a9cd3..dc3b92673f1e654535d9a300579b09c6ff2172cf 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcCollaborationRequestTestFactory.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcCollaborationRequestTestFactory.java @@ -1,6 +1,7 @@ package de.ozgcloud.collaboration.vorgang; import de.ozgcloud.collaboration.CollaborationRequestTestFactory; +import de.ozgcloud.collaboration.fachstelle.FachstelleTestFactory; import de.ozgcloud.collaboration.request.GrpcCollaborationRequest; import de.ozgcloud.command.CommandTestFactory; @@ -14,10 +15,11 @@ public class GrpcCollaborationRequestTestFactory { return GrpcCollaborationRequest.newBuilder() .setId(CollaborationRequestTestFactory.ID_STR) .setBeschreibung(CollaborationRequestTestFactory.BESCHREIBUNG) + .setTitel(CollaborationRequestTestFactory.TITEL) .setCollaborationLevel(CollaborationRequestTestFactory.COLLABORATION_LEVEL) .setCollaborationVorgangId(CollaborationRequestTestFactory.COLLABORATION_VORGANG_ID) .setCreatedBy(CommandTestFactory.CREATED_BY) - .setZustaendigeStelle(CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE) + .setZustaendigeStelle(FachstelleTestFactory.TECHNICAL_ID) .setCollaborationLevel(CollaborationRequestTestFactory.COLLABORATION_LEVEL); } } diff --git a/lombok.config b/lombok.config index a06fa130e8af26b659f2d3a0cb1114cd966a9b0e..f881e23c3720b1ad363aac0f5c1fe615a66a5d90 100644 --- a/lombok.config +++ b/lombok.config @@ -28,4 +28,5 @@ lombok.log.log4j.flagUsage = ERROR lombok.data.flagUsage = ERROR lombok.nonNull.exceptionType = IllegalArgumentException lombok.addLombokGeneratedAnnotation = true -lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier \ No newline at end of file +lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier +lombok.copyableAnnotations += net.devh.boot.grpc.client.inject.GrpcClient \ No newline at end of file