diff --git a/collaboration-manager-interface/pom.xml b/collaboration-manager-interface/pom.xml index ac7f3a252577176763517db80311bbbacbefd4a3..d1324ea396b72dad7e8fa6ef6278a0b81d960578 100644 --- a/collaboration-manager-interface/pom.xml +++ b/collaboration-manager-interface/pom.xml @@ -50,11 +50,25 @@ <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> + <vorgang-manager.version>2.13.0-SNAPSHOT</vorgang-manager.version> <find-and-replace-maven-plugin.version>1.1.0</find-and-replace-maven-plugin.version> <ozgcloud.license.version>1.6.0</ozgcloud.license.version> </properties> <dependencies> + <!-- OZG-Cloud --> + <dependency> + <groupId>de.ozgcloud.vorgang</groupId> + <artifactId>vorgang-manager-interface</artifactId> + <version>${vorgang-manager.version}</version> + </dependency> + <dependency> + <groupId>de.ozgcloud.vorgang</groupId> + <artifactId>vorgang-manager-interface</artifactId> + <classifier>sources</classifier> + <scope>provided</scope> + <version>${vorgang-manager.version}</version> + </dependency> <!-- protobuf --> <dependency> <groupId>com.google.protobuf</groupId> diff --git a/collaboration-manager-interface/src/main/protobuf/.gitkeep b/collaboration-manager-interface/src/main/protobuf/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/collaboration-manager-interface/src/main/protobuf/collaboration.model.proto b/collaboration-manager-interface/src/main/protobuf/collaboration.model.proto new file mode 100644 index 0000000000000000000000000000000000000000..8666ef1741a63fc287746088b92e9f3b211d2d1c --- /dev/null +++ b/collaboration-manager-interface/src/main/protobuf/collaboration.model.proto @@ -0,0 +1,123 @@ +/* + * 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. + */ +syntax = "proto3"; + +package de.ozgcloud.collaboration; + +option java_multiple_files = true; +option java_package = "de.ozgcloud.collaboration"; +option java_outer_classname = "CollaborationModelProto"; + +message GrpcFindVorgangRequest { + string vorgangId = 1; + string samlToken = 2; +} + +message GrpcFindVorgangResponse { + GrpcVorgang vorgang = 1; +} + +message GrpcVorgang { + string id = 1; + int64 version = 2; + string vorgangName = 3; + string vorgangNummer = 4; + + GrpcVorgangHeader header = 5; + GrpcEingang eingang = 6; + GrpcCollaborationRequest collaborationRequest = 7; +} + +message GrpcVorgangHeader { + string createdAt = 1; + string aktenzeichen = 2; +} + +message GrpcCollaborationRequest { + string title = 1; + string text = 2; +} + +message GrpcEingang { + GrpcAntragsteller antragsteller = 1; + + GrpcFormData formData = 2; + + repeated GrpcFileGroup attachments = 3; + repeated GrpcFile representations = 4; +} + +message GrpcFileGroup { + string name = 1; + repeated GrpcFile files = 2; +} + +message GrpcFile { + string id = 1; + string vendorId = 2; + string name = 3; + string contentType = 4; + int64 size = 5; +} + +message GrpcAntragsteller { + string firmaName = 1; + string anrede = 2; + string nachname = 3; + string vorname = 4; + string geburtsdatum = 5; + string geburtsort = 7; + string geburtsname = 8; + string email = 9; + string telefon = 10; + string strasse = 11; + string hausnummer = 12; + string plz = 13; + string ort = 14; + + GrpcFormData otherData = 15; +} + +message GrpcFormData { + repeated GrpcSubFormData formData = 1; +} + +message GrpcSubForm { + string name = 1; + string label = 2; + repeated GrpcSubFormData formData = 3; +} + +message GrpcSubFormData { + oneof data { + GrpcFormField field = 1; + GrpcSubForm form = 2; + } +} + +message GrpcFormField { + string name = 1; + string label = 2; + string value = 3; +} \ No newline at end of file diff --git a/collaboration-manager-interface/src/main/protobuf/collaboration.proto b/collaboration-manager-interface/src/main/protobuf/collaboration.proto new file mode 100644 index 0000000000000000000000000000000000000000..33cf53ed2f4e93a8cc2169a15350fcc054b2d442 --- /dev/null +++ b/collaboration-manager-interface/src/main/protobuf/collaboration.proto @@ -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. + */ +syntax = "proto3"; + +package de.ozgcloud.collaboration; + +import "collaboration.model.proto"; + +option java_multiple_files = true; +option java_package = "de.ozgcloud.collaboration"; +option java_outer_classname = "CollaborationProto"; + +service CollaborationService { + + rpc FindVorgang(GrpcFindVorgangRequest) returns (GrpcFindVorgangResponse) { + } +} \ No newline at end of file diff --git a/collaboration-manager-server/pom.xml b/collaboration-manager-server/pom.xml index 584d8c363192c9ce2b2cfd0013585c24b36cabbb..95b93e5c01d236014f5d03d4c42d0dd14cd1f219 100644 --- a/collaboration-manager-server/pom.xml +++ b/collaboration-manager-server/pom.xml @@ -40,8 +40,8 @@ <name>OZG-Cloud Collaboration Manager Server</name> <properties> - <vorgang-manager.version>2.12.0-SNAPSHOT</vorgang-manager.version> - <api-lib.version>0.11.0</api-lib.version> + <vorgang-manager.version>2.13.0-SNAPSHOT</vorgang-manager.version> + <api-lib.version>0.12.0-SNAPSHOT</api-lib.version> </properties> <dependencies> @@ -51,6 +51,11 @@ <artifactId>command-manager</artifactId> <version>${vorgang-manager.version}</version> </dependency> + <dependency> + <groupId>de.ozgcloud.collaboration</groupId> + <artifactId>collaboration-manager-interface</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-interface</artifactId> @@ -72,6 +77,12 @@ <artifactId>spring-boot-starter-validation</artifactId> </dependency> + <!-- gRPC --> + <dependency> + <groupId>net.devh</groupId> + <artifactId>grpc-server-spring-boot-starter</artifactId> + </dependency> + <!--TEST--> <dependency> <groupId>de.ozgcloud.command</groupId> @@ -80,6 +91,14 @@ <type>test-jar</type> <scope>test</scope> </dependency> + <dependency> + <groupId>de.ozgcloud.api-lib</groupId> + <artifactId>api-lib-core</artifactId> + <version>${api-lib.version}</version> + <type>test-jar</type> + <scope>test</scope> + </dependency> + </dependencies> <build> diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationGrpcService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationGrpcService.java new file mode 100644 index 0000000000000000000000000000000000000000..17d5c1c2bda129376973019c196c08d8673f37e1 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationGrpcService.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.collaboration; + +import de.ozgcloud.collaboration.vorgang.CollaborationVorgangMapper; +import de.ozgcloud.collaboration.vorgang.Vorgang; +import de.ozgcloud.collaboration.vorgang.VorgangService; +import io.grpc.stub.StreamObserver; +import lombok.RequiredArgsConstructor; +import net.devh.boot.grpc.server.service.GrpcService; + +@GrpcService +@RequiredArgsConstructor +public class CollaborationGrpcService extends CollaborationServiceGrpc.CollaborationServiceImplBase { + + private final VorgangService vorgangService; + + private final CollaborationVorgangMapper vorgangMapper; + + @Override + public void findVorgang(GrpcFindVorgangRequest request, StreamObserver<GrpcFindVorgangResponse> responseObserver) { + var vorgang = vorgangService.getVorgang(request.getVorgangId()); + responseObserver.onNext(buildFindVorgangResponse(vorgang)); + responseObserver.onCompleted(); + } + + GrpcFindVorgangResponse buildFindVorgangResponse(Vorgang vorgang) { + return GrpcFindVorgangResponse.newBuilder() + .setVorgang(vorgangMapper.toGrpc(vorgang)) + .build(); + } +} 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 d0642a3122c2ff95c2d8740366244285df18fd63..185050d2ae638a872e76f3ee3eef90ab57cad293 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 @@ -41,15 +41,19 @@ public class CollaborationManagerConfiguration { public static final String USER_PROFILE_SERVICE_NAME = "collaboration_UserProfileService"; public static final String VORGANG_SERVICE_NAME = "collaboration_VorgangService"; public static final String VORGANG_REMOTE_SERVICE_NAME = "collaboration_VorgangRemoteService"; + public static final String COLLABORATION_SERVICE_NAME = "collaboration_CollaborationService"; + public static final String CALL_CONTEXT_INTERCEPTOR_NAME = "collaboration_CallContextInterceptor"; public static final String CALL_CONTEXT_PROVIDER_NAME = "collaboration_CallContextProvider"; - public static final String COLLABORATION_SERVICE_NAME = "collaboration_CollaborationService"; - @GrpcClient("command-manager") + public static final String GRPC_VORGANG_MANAGER_NAME = "vorgang-manager"; + public static final String GRPC_COMMAND_MANAGER_NAME = "command-manager"; + + @GrpcClient(CollaborationManagerConfiguration.GRPC_COMMAND_MANAGER_NAME) private CommandServiceGrpc.CommandServiceBlockingStub commandServiceStub; @Bean(COMMAND_SERVICE_NAME) - // NOSONAR + // NOSONAR OzgCloudCommandService grpcOzgCloudCommandService(CommandMapper commandMapper, CollaborationManagerCallContextProvider contextProvider) { return new GrpcOzgCloudCommandService(commandServiceStub, commandMapper, contextProvider, GrpcOzgCloudCommandService.DEFAULT_COMMAND_REQUEST_THRESHOLD_MILLIS); diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/user/CollaborationUserProfileMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/user/CollaborationUserProfileMapper.java index ca193191a030df2af925f3d763f1409157a3bd68..9e9a1b2ba8e19a306b6a5870392ce4ebe354d1ac 100644 --- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/user/CollaborationUserProfileMapper.java +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/user/CollaborationUserProfileMapper.java @@ -24,11 +24,12 @@ package de.ozgcloud.collaboration.common.user; import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; import de.ozgcloud.apilib.user.OzgCloudUserId; import de.ozgcloud.apilib.user.OzgCloudUserProfile; -@Mapper +@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) public interface CollaborationUserProfileMapper { UserProfile mapProfile(OzgCloudUserProfile userProfile); diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Antragsteller.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Antragsteller.java new file mode 100644 index 0000000000000000000000000000000000000000..6e95b450b7d9a5412d79c5dc9eaca5fa83534eac --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Antragsteller.java @@ -0,0 +1,29 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.util.List; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +class Antragsteller { + + private String firmaName; + private String anrede; + private String vorname; + private String nachname; + + private String geburtsdatum; + private String geburtsort; + private String geburtsname; + private String strasse; + private String hausnummer; + private String plz; + private String ort; + + private String email; + private String telefon; + + private List<FormDataEntry> otherData; +} \ No newline at end of file diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationAntragstellerMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationAntragstellerMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..240c45626be091dbabc7b4c6297dd130f7258d46 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationAntragstellerMapper.java @@ -0,0 +1,36 @@ +package de.ozgcloud.collaboration.vorgang; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.apilib.vorgang.OzgCloudAntragsteller; +import de.ozgcloud.collaboration.GrpcAntragsteller; + +@Mapper(uses = { CollaborationFormDataMapper.class }, unmappedTargetPolicy = ReportingPolicy.WARN) +interface CollaborationAntragstellerMapper { + + Antragsteller fromOzgCloudAntragsteller(OzgCloudAntragsteller antragsteller); + + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "mergeOtherData", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "anredeBytes", ignore = true) + @Mapping(target = "emailBytes", ignore = true) + @Mapping(target = "firmaNameBytes", ignore = true) + @Mapping(target = "geburtsdatumBytes", ignore = true) + @Mapping(target = "geburtsnameBytes", ignore = true) + @Mapping(target = "geburtsortBytes", ignore = true) + @Mapping(target = "hausnummerBytes", ignore = true) + @Mapping(target = "nachnameBytes", ignore = true) + @Mapping(target = "ortBytes", ignore = true) + @Mapping(target = "plzBytes", ignore = true) + @Mapping(target = "strasseBytes", ignore = true) + @Mapping(target = "telefonBytes", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "vornameBytes", ignore = true) + @Mapping(target = "allFields", ignore = true) + GrpcAntragsteller toGrpc(Antragsteller antragsteller); +} \ No newline at end of file diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationEingangMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationEingangMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..91c75be4d91c6e8d415797b993823ed122568eb5 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationEingangMapper.java @@ -0,0 +1,44 @@ +package de.ozgcloud.collaboration.vorgang; + +import org.mapstruct.CollectionMappingStrategy; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.NullValueMappingStrategy; +import org.mapstruct.NullValuePropertyMappingStrategy; + +import de.ozgcloud.apilib.vorgang.OzgCloudEingang; +import de.ozgcloud.collaboration.GrpcEingang; + +@Mapper(uses = { CollaborationAntragstellerMapper.class, CollaborationFileGroupMapper.class, CollaborationFileMapper.class, + CollaborationFormDataMapper.class }, // + collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, //// + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_NULL, // + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, // + nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT) +interface CollaborationEingangMapper { + + @Mapping(target = "attachment", ignore = true) + @Mapping(target = "representation", ignore = true) + @Mapping(target = "formDataEntrys", source = "formDataEntrys") + abstract Eingang fromOzgCloudEingang(OzgCloudEingang eingang); + + @Mapping(target = "formData", source = "formDataEntrys") + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "mergeAntragsteller", ignore = true) + @Mapping(target = "mergeFormData", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "removeAttachments", ignore = true) + @Mapping(target = "removeRepresentations", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "allFields", ignore = true) + @Mapping(target = "attachmentsBuilderList", ignore = true) + @Mapping(target = "attachmentsList", source = "attachments") + @Mapping(target = "attachmentsOrBuilderList", ignore = true) + @Mapping(target = "representationsBuilderList", ignore = true) + @Mapping(target = "representationsList", source = "representations") + @Mapping(target = "representationsOrBuilderList", ignore = true) + abstract GrpcEingang toGrpc(Eingang eingang); +} \ No newline at end of file diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFileGroupMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFileGroupMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..9972b78637be35fcce2be2dfaddf3cab58740664 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFileGroupMapper.java @@ -0,0 +1,33 @@ +package de.ozgcloud.collaboration.vorgang; + +import org.mapstruct.CollectionMappingStrategy; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.apilib.file.OzgCloudFileGroup; +import de.ozgcloud.collaboration.GrpcFileGroup; + +@Mapper(uses = { CollaborationFileMapper.class }, // + collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, // + unmappedTargetPolicy = ReportingPolicy.WARN, // + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +interface CollaborationFileGroupMapper { + + @Mapping(target = "file", ignore = true) + FileGroup fromOzgCloudFileGroup(OzgCloudFileGroup fileGroup); + + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "removeFiles", ignore = true) + @Mapping(target = "nameBytes", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "allFields", ignore = true) + @Mapping(target = "filesBuilderList", ignore = true) + @Mapping(target = "filesList", source = "files") + @Mapping(target = "filesOrBuilderList", ignore = true) + GrpcFileGroup toGrpc(FileGroup fileGroup); +} diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFileMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFileMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..36cdce6b0cb6ba24408a342a93813097cb725a9d --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFileMapper.java @@ -0,0 +1,32 @@ +package de.ozgcloud.collaboration.vorgang; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.apilib.file.OzgCloudFile; +import de.ozgcloud.apilib.file.OzgCloudFileId; +import de.ozgcloud.collaboration.GrpcFile; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) +interface CollaborationFileMapper { + + File fromOzgCloudFile(OzgCloudFile file); + + @Mapping(target = "contentTypeBytes", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "idBytes", ignore = true) + @Mapping(target = "nameBytes", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "vendorId", ignore = true) + @Mapping(target = "vendorIdBytes", ignore = true) + @Mapping(target = "allFields", ignore = true) + GrpcFile toGrpc(File file); + + default String toString(OzgCloudFileId id) { + return id.toString(); + } +} diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFormDataMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFormDataMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..e63edd30a7fffef520f6de78cf31397c00fefcd6 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFormDataMapper.java @@ -0,0 +1,122 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.util.List; +import java.util.stream.Stream; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.apilib.vorgang.OzgCloudFormDataEntry; +import de.ozgcloud.apilib.vorgang.OzgCloudFormField; +import de.ozgcloud.apilib.vorgang.OzgCloudSubForm; +import de.ozgcloud.collaboration.GrpcFormData; +import de.ozgcloud.collaboration.GrpcFormField; +import de.ozgcloud.collaboration.GrpcSubForm; +import de.ozgcloud.collaboration.GrpcSubFormData; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) +public interface CollaborationFormDataMapper { + + default List<FormDataEntry> fromOzgCloudEntries(List<OzgCloudFormDataEntry> entries) { + return Stream.concat(fromOzgCloudFormFields(entries), fromOzgCloudSubForms(entries)).toList(); + } + + default Stream<FormDataEntry> fromOzgCloudFormFields(List<OzgCloudFormDataEntry> entries) { + return entries.stream() + .filter(OzgCloudFormDataEntry::isFormEntry) + .map(OzgCloudFormField.class::cast) + .map(this::fromOzgCloudFormField); + } + + default Stream<FormDataEntry> fromOzgCloudSubForms(List<OzgCloudFormDataEntry> entries) { + return entries.stream() + .filter(OzgCloudFormDataEntry::isSubForm) + .map(OzgCloudSubForm.class::cast) + .map(this::fromOzgCloudSubForm); + } + + default FormDataEntry fromOzgCloudSubForm(OzgCloudSubForm subForm) { + var subForms = subForm.getFormEntrys().stream() + .filter(OzgCloudFormDataEntry::isSubForm) + .map(OzgCloudSubForm.class::cast) + .map(this::fromOzgCloudSubForm); + + var formFields = subForm.getFormEntrys().stream() + .filter(OzgCloudFormDataEntry::isFormEntry) + .map(OzgCloudFormField.class::cast) + .map(this::fromOzgCloudFormField); + + return SubForm.builder() + .label(subForm.getLabel()) + .name(subForm.getName()) + .formEntrys(Stream.concat(subForms, formFields).toList()) + .build(); + } + + FormField fromOzgCloudFormField(OzgCloudFormField formField); + + default GrpcFormData toGrpcFormData(List<FormDataEntry> entries) { + return GrpcFormData.newBuilder() + .addAllFormData(Stream.concat(fromFormField(entries), fromSubForm(entries)).toList()) + .build(); + } + + default Stream<GrpcSubFormData> fromFormField(List<FormDataEntry> entry) { + return entry.stream() + .filter(FormDataEntry::isFormEntry) + .map(FormField.class::cast) + .map(this::toGrpcFormField) + .map(formField -> GrpcSubFormData.newBuilder().setField(formField).build()); + } + + default Stream<GrpcSubFormData> fromSubForm(List<FormDataEntry> entry) { + return entry.stream() + .filter(FormDataEntry::isSubForm) + .map(SubForm.class::cast) + .map(this::toGrpcSubForm) + .map(subForm -> GrpcSubFormData.newBuilder().setForm(subForm).build()); + } + + @Mapping(target = "value", qualifiedByName = "mapValue", source = "value") + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "labelBytes", ignore = true) + @Mapping(target = "nameBytes", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "valueBytes", ignore = true) + @Mapping(target = "allFields", ignore = true) + GrpcFormField toGrpcFormField(FormField formField); + + @Named("mapValue") + default String toString(Object object) { + return String.valueOf(object); + } + + default GrpcSubForm toGrpcSubForm(SubForm subForm) { + var subForms = subForm.getFormEntrys().stream() + .filter(FormDataEntry::isSubForm) + .map(SubForm.class::cast) + .map(this::toGrpcSubForm) + .map(entry -> GrpcSubFormData.newBuilder() + .setForm(entry) + .build()); + + var formFields = subForm.getFormEntrys().stream() + .filter(FormDataEntry::isFormEntry) + .map(FormField.class::cast) + .map(this::toGrpcFormField) + .map(entry -> GrpcSubFormData.newBuilder() + .setField(entry) + .build()); + + return GrpcSubForm.newBuilder() + .setLabel(subForm.getLabel()) + .setName(subForm.getName()) + .addAllFormData(Stream.concat(subForms, formFields).toList()) + .build(); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationRequest.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..60b26ebb254225e52af8e4ebb324031d2960400c --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationRequest.java @@ -0,0 +1,14 @@ +package de.ozgcloud.collaboration.vorgang; + +import lombok.Builder; +import lombok.Getter; +import lombok.ToString; + +@ToString +@Getter +@Builder +class CollaborationRequest { + + private String title; + private String text; +} \ No newline at end of file diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationRequestMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationRequestMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..406e74dafc9412141b175a4371dd8d3925ce82a9 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationRequestMapper.java @@ -0,0 +1,21 @@ +package de.ozgcloud.collaboration.vorgang; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.collaboration.GrpcCollaborationRequest; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) +interface CollaborationRequestMapper { + + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "textBytes", ignore = true) + @Mapping(target = "titleBytes", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "allFields", ignore = true) + GrpcCollaborationRequest toGrpc(CollaborationRequest request); +} \ No newline at end of file diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..831d1b8d30c4be1d00e17a872cefcd6df2631299 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapper.java @@ -0,0 +1,54 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.util.List; + +import org.apache.commons.collections.CollectionUtils; +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 de.ozgcloud.apilib.vorgang.OzgCloudVorgang; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangIdMapper; +import de.ozgcloud.collaboration.GrpcVorgang; + +@Mapper(uses = { OzgCloudVorgangIdMapper.class, CollaborationEingangMapper.class, CollaborationRequestMapper.class }, // + unmappedTargetPolicy = ReportingPolicy.WARN, // + collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, // + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, // + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface CollaborationVorgangMapper { + + @Mapping(target = "collaborationRequest", ignore = true) + @Mapping(target = "eingang", ignore = true) + Vorgang fromOzgCloudVorgang(OzgCloudVorgang vorgang); + + @Mapping(target = "eingang", source = "eingangs") + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "mergeCollaborationRequest", ignore = true) + @Mapping(target = "mergeEingang", ignore = true) + @Mapping(target = "mergeHeader", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "idBytes", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "vorgangNameBytes", ignore = true) + @Mapping(target = "vorgangNummerBytes", ignore = true) + @Mapping(target = "allFields", ignore = true) + GrpcVorgang toGrpc(Vorgang vorgang); + + default String toString(OzgCloudVorgangId id) { + return id.toString(); + } + + default Eingang mapListToGrpcEingang(List<Eingang> eingaenge) { + if (CollectionUtils.isEmpty(eingaenge)) { + return null; + } + return eingaenge.get(0); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Eingang.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Eingang.java new file mode 100644 index 0000000000000000000000000000000000000000..114f7bfd8de4f0340d9170494470cfb7ce0d8dba --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Eingang.java @@ -0,0 +1,24 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.util.List; + +import lombok.Builder; +import lombok.Getter; +import lombok.Singular; +import lombok.ToString; + +@ToString +@Getter +@Builder +class Eingang { + + @Builder.Default + private Antragsteller antragsteller = Antragsteller.builder().build(); + + private List<FormDataEntry> formDataEntrys; + + @Singular + private List<FileGroup> attachments; + @Singular + private List<File> representations; +} \ No newline at end of file diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/File.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/File.java new file mode 100644 index 0000000000000000000000000000000000000000..3bf251ca627875fd7270b1b2b2c2d8c2a7e7685c --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/File.java @@ -0,0 +1,18 @@ +package de.ozgcloud.collaboration.vorgang; + +import de.ozgcloud.apilib.file.OzgCloudFileId; +import lombok.Builder; +import lombok.Getter; +import lombok.ToString; + +@Builder +@Getter +@ToString +class File { + + private OzgCloudFileId id; + + private String name; + private String contentType; + private long size; +} diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FileGroup.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FileGroup.java new file mode 100644 index 0000000000000000000000000000000000000000..f53808b9cced82e5a2183f0fd9ae77d0e2268b40 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FileGroup.java @@ -0,0 +1,19 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.util.List; + +import lombok.Builder; +import lombok.Getter; +import lombok.Singular; +import lombok.ToString; + +@Builder +@Getter +@ToString +class FileGroup { + + private String name; + + @Singular + private List<File> files; +} diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FormDataEntry.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FormDataEntry.java new file mode 100644 index 0000000000000000000000000000000000000000..1253cb3391b2a7ae66361e5771c5759ea122e531 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FormDataEntry.java @@ -0,0 +1,16 @@ +package de.ozgcloud.collaboration.vorgang; + +interface FormDataEntry { + + String getName(); + + String getLabel(); + + default boolean isSubForm() { + return false; + } + + default boolean isFormEntry() { + return false; + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FormField.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FormField.java new file mode 100644 index 0000000000000000000000000000000000000000..fdf85ecbce92c2e4e03a92d2cb1ed57d65ca84b2 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FormField.java @@ -0,0 +1,21 @@ +package de.ozgcloud.collaboration.vorgang; + +import lombok.Builder; +import lombok.Getter; +import lombok.ToString; + +@ToString +@Getter +@Builder +class FormField implements FormDataEntry { + + private String name; + private String label; + + private Object value; + + @Override + public boolean isFormEntry() { + return true; + } +} diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/SubForm.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/SubForm.java new file mode 100644 index 0000000000000000000000000000000000000000..a2c43fddc7d174e742da1776fa3dd2fa8e61fa63 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/SubForm.java @@ -0,0 +1,22 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.util.List; + +import lombok.Builder; +import lombok.Getter; +import lombok.Singular; + +@Getter +@Builder +class SubForm implements FormDataEntry { + + private String name; + private String label; + @Singular + private List<FormDataEntry> formEntrys; + + @Override + public boolean isSubForm() { + return true; + } +} diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Vorgang.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Vorgang.java new file mode 100644 index 0000000000000000000000000000000000000000..faa23784fb539208ef4e2346c93a7e872bd80250 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Vorgang.java @@ -0,0 +1,29 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.util.List; + +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; +import lombok.Builder; +import lombok.Getter; +import lombok.Singular; +import lombok.ToString; + +@ToString +@Getter +@Builder +public class Vorgang { + + private OzgCloudVorgangId id; + private long version; + private String vorgangName; + private String vorgangNummer; + + @ToString.Include + private VorgangHeader header; + + @Singular + private List<Eingang> eingangs; + + @ToString.Include + private CollaborationRequest collaborationRequest; +} \ No newline at end of file diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangHeader.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangHeader.java new file mode 100644 index 0000000000000000000000000000000000000000..095e30a09012434d478ab2ab51ed6932b7fbf7ec --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangHeader.java @@ -0,0 +1,16 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.time.ZonedDateTime; + +import lombok.Builder; +import lombok.Getter; +import lombok.ToString; + +@ToString +@Getter +@Builder +class VorgangHeader { + + private ZonedDateTime createdAt; + private String aktenzeichen; +} \ No newline at end of file diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteService.java index 971117179d3c08e6285c7a852dd571439324e05e..a4e0595e004ff5e5fd936249fdc15a88fa4cc852 100644 --- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteService.java +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteService.java @@ -27,6 +27,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService; import de.ozgcloud.collaboration.CollaborationCallContextAttachingInterceptor; import de.ozgcloud.collaboration.CollaborationManagerCollaborationRequestMapper; import de.ozgcloud.collaboration.CollaborationManagerConfiguration; @@ -38,12 +40,17 @@ import net.devh.boot.grpc.client.inject.GrpcClient; @Service(CollaborationManagerConfiguration.VORGANG_REMOTE_SERVICE_NAME) class VorgangRemoteService { - @GrpcClient("vorgang-manager") + @GrpcClient(CollaborationManagerConfiguration.GRPC_VORGANG_MANAGER_NAME) private VorgangServiceBlockingStub vorgangServiceBlockingStub; + @Autowired + private OzgCloudVorgangService ozgCloudVorgangService; @Autowired private CollaborationManagerCollaborationRequestMapper collaborationRequestMapper; + @Autowired + private CollaborationVorgangMapper mapper; + @Autowired @Qualifier(CollaborationManagerConfiguration.CALL_CONTEXT_INTERCEPTOR_NAME) private CollaborationCallContextAttachingInterceptor callContextInterceptor; @@ -61,4 +68,8 @@ class VorgangRemoteService { VorgangServiceBlockingStub getServiceStub() { return vorgangServiceBlockingStub.withInterceptors(callContextInterceptor); } + + public Vorgang getVorgang(OzgCloudVorgangId vorgangId) { + return mapper.fromOzgCloudVorgang(ozgCloudVorgangService.getById(vorgangId)); + } } diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangService.java index 4aba21249268fda3f642316267f8414563a8d2f0..4370a27c25911760d85f1281969c6d613883ca3f 100644 --- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangService.java +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangService.java @@ -26,6 +26,7 @@ package de.ozgcloud.collaboration.vorgang; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; import de.ozgcloud.collaboration.CollaborationManagerConfiguration; import de.ozgcloud.collaboration.CollaborationRequest; import lombok.RequiredArgsConstructor; @@ -40,4 +41,8 @@ public class VorgangService { public String createCollaborationVorgang(CollaborationRequest request) { return vorgangRemoteService.createCollaborationVorgang(request); } + + public Vorgang getVorgang(String vorgangId) { + return vorgangRemoteService.getVorgang(OzgCloudVorgangId.from(vorgangId)); + } } diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationGrpcServiceTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationGrpcServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..b95b5e952486d72dfd99a17ac67f60b37ed76a45 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationGrpcServiceTest.java @@ -0,0 +1,134 @@ +/* + * 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; + +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.vorgang.CollaborationVorgangMapper; +import de.ozgcloud.collaboration.vorgang.GrpcVorgangTestFactory; +import de.ozgcloud.collaboration.vorgang.Vorgang; +import de.ozgcloud.collaboration.vorgang.VorgangService; +import de.ozgcloud.collaboration.vorgang.VorgangTestFactory; +import de.ozgcloud.command.CommandTestFactory; +import io.grpc.stub.StreamObserver; + +class CollaborationGrpcServiceTest { + + @Spy + @InjectMocks + private CollaborationGrpcService grpcService; + + @Mock + private VorgangService vorgangService; + @Mock + private CollaborationVorgangMapper vorgangMapper; + + @Nested + class TestFindVorgang { + + private static final Vorgang VORGANG = VorgangTestFactory.create(); + + @Mock + private GrpcFindVorgangResponse grpcResponse; + @Mock + private StreamObserver<GrpcFindVorgangResponse> responseObserver; + + @BeforeEach + void init() { + doReturn(grpcResponse).when(grpcService).buildFindVorgangResponse(any()); + when(vorgangService.getVorgang(anyString())).thenReturn(VORGANG); + } + + @Test + void shouldCallGetVorgang() { + findVorgang(); + + verify(vorgangService).getVorgang(CommandTestFactory.VORGANG_ID); + } + + @Test + void shouldCallBuildFindVorgangResponse() { + findVorgang(); + + verify(grpcService).buildFindVorgangResponse(VORGANG); + } + + @Test + void shouldCallOnNext() { + findVorgang(); + + verify(responseObserver).onNext(grpcResponse); + } + + @Test + void shouldCallOnCompleted() { + findVorgang(); + + verify(responseObserver).onCompleted(); + } + + private void findVorgang() { + grpcService.findVorgang(GrpcFindVorgangRequestTestFactory.create(), responseObserver); + } + } + + @Nested + class TestBuildFindVorgangResponse { + + private final Vorgang vorgang = VorgangTestFactory.create(); + private final GrpcVorgang grpcVorgang = GrpcVorgangTestFactory.create(); + + @BeforeEach + void init() { + when(vorgangMapper.toGrpc(any())).thenReturn(GrpcVorgangTestFactory.create()); + } + + @Test + void shouldCallMapper() { + buildFindVorgangResponse(); + + verify(vorgangMapper).toGrpc(vorgang); + } + + @Test + void shouldSetVorgang() { + var response = buildFindVorgangResponse(); + + assertThat(response.getVorgang()).isEqualTo(grpcVorgang); + } + + private GrpcFindVorgangResponse buildFindVorgangResponse() { + return grpcService.buildFindVorgangResponse(vorgang); + } + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationTestApplication.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationTestApplication.java index 4445040555364d7f3a65eb6f800654071eb32245..9bf930073cd946f9f074a695515798666b7153f9 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationTestApplication.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationTestApplication.java @@ -27,16 +27,32 @@ import java.util.TimeZone; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Bean; import org.springframework.security.authentication.AuthenticationTrustResolver; import org.springframework.security.authentication.AuthenticationTrustResolverImpl; import de.ozgcloud.apilib.common.command.grpc.CommandMapper; import de.ozgcloud.apilib.common.command.grpc.CommandMapperImpl; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService; +import de.ozgcloud.apilib.vorgang.grpc.GrpcOzgCloudVorgangService; +import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangMapper; +import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangStubMapper; +import de.ozgcloud.collaboration.common.callcontext.CollaborationManagerCallContextProvider; +import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc; @SpringBootApplication(scanBasePackages = { "de.ozgcloud" }) public class CollaborationTestApplication { + @MockBean + private VorgangServiceGrpc.VorgangServiceBlockingStub vorgangServiceStub; + @MockBean + private OzgCloudVorgangStubMapper vorgangStubMapper; + @MockBean + private OzgCloudVorgangMapper vorgangMapper; + @MockBean + private CollaborationManagerCallContextProvider contextProvider; + public static void main(String[] args) { TimeZone.setDefault(TimeZone.getTimeZone("UTC")); SpringApplication.run(CollaborationTestApplication.class, args); @@ -51,4 +67,9 @@ public class CollaborationTestApplication { CommandMapper commandMapper() { return new CommandMapperImpl(); } + + @Bean + OzgCloudVorgangService ozgCloudVorgangService() { + return new GrpcOzgCloudVorgangService(vorgangServiceStub, vorgangMapper, vorgangStubMapper, contextProvider); + } } diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/GrpcFindVorgangRequestTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/GrpcFindVorgangRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..71691106fcdb303f57754f3e319511c0ee6bdeb0 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/GrpcFindVorgangRequestTestFactory.java @@ -0,0 +1,41 @@ +/* + * 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; + +import de.ozgcloud.command.CommandTestFactory; + +public class GrpcFindVorgangRequestTestFactory { + + public static final String SAML_TOKEN = "token"; + + public static GrpcFindVorgangRequest create() { + return createBuilder().build(); + } + + public static GrpcFindVorgangRequest.Builder createBuilder() { + return GrpcFindVorgangRequest.newBuilder() + .setVorgangId(CommandTestFactory.VORGANG_ID) + .setSamlToken(SAML_TOKEN); + } +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/AntragstellerTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/AntragstellerTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..2d0cf52a4ef1efca33b08c731d9f39a55af0768a --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/AntragstellerTestFactory.java @@ -0,0 +1,47 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.util.List; + +public class AntragstellerTestFactory { + + public static final String ANREDE = "Mr."; + + public static final String FIRSTNAME = "Theo"; + public static final String NACHNAME = "Test"; + public static final String GEBURTSDATUM = "10.04.1995"; + public static final String GEBURTSORT = "Downtown"; + public static final String GEBURTSNAME = "Toast"; + public static final String STRASSE = "Treestreet"; + public static final String HAUSNUMMER = "5a"; + public static final String PLZ = "12345"; + public static final String ORT = "City"; + public static final String E_MAIL = "test@local"; + public static final String TELEFON = "0123 2354 546"; + public static final String FIRMA_NAME = "TestFirma"; + + public static final List<FormDataEntry> OTHER_DATA = List.of( + FormDataEntryTestFactory.createFormField(), + FormDataEntryTestFactory.createSubForm()); + + public static Antragsteller create() { + return createBuilder().build(); + } + + public static Antragsteller.AntragstellerBuilder createBuilder() { + return Antragsteller.builder() + .anrede(ANREDE) + .vorname(FIRSTNAME) + .nachname(NACHNAME) + .firmaName(FIRMA_NAME) + .geburtsdatum(GEBURTSDATUM) + .geburtsort(GEBURTSORT) + .geburtsname(GEBURTSNAME) + .strasse(STRASSE) + .hausnummer(HAUSNUMMER) + .plz(PLZ) + .ort(ORT) + .email(E_MAIL) + .telefon(TELEFON) + .otherData(OTHER_DATA); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationAntragstellerMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationAntragstellerMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..f44a646fc44a62f2a7b4cb596d67d3aac4e055e7 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationAntragstellerMapperTest.java @@ -0,0 +1,82 @@ +package de.ozgcloud.collaboration.vorgang; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import de.ozgcloud.apilib.vorgang.OzgCloudAntragsteller; +import de.ozgcloud.apilib.vorgang.OzgCloudAntragstellerTestFactory; +import de.ozgcloud.apilib.vorgang.OzgCloudFormDataEntry; + +class CollaborationAntragstellerMapperTest { + + @InjectMocks + private CollaborationAntragstellerMapper mapper = Mappers.getMapper(CollaborationAntragstellerMapper.class); + @Mock + private CollaborationFormDataMapper formDataMapper = Mappers.getMapper(CollaborationFormDataMapper.class); + + @DisplayName("From ozgCloudAntragsteller") + @Nested + class TestFromOzgCloudAntragsteller { + + private List<FormDataEntry> otherData = List.of(FormDataEntryTestFactory.createFormField(), FormDataEntryTestFactory.createSubForm()); + private List<OzgCloudFormDataEntry> ozgCloudFormDataEntries = OzgCloudAntragstellerTestFactory.createOtherData(); + private OzgCloudAntragsteller ozgCloudAntragsteller = OzgCloudAntragstellerTestFactory.createBuilder().otherData(ozgCloudFormDataEntries) + .build(); + + @BeforeEach() + void mock() { + when(formDataMapper.fromOzgCloudEntries(any())).thenReturn(otherData); + } + + @Test + void shouldCallFormDataEntryMapper() { + mapper.fromOzgCloudAntragsteller(ozgCloudAntragsteller); + + verify(formDataMapper).fromOzgCloudEntries(ozgCloudFormDataEntries); + } + + @Test + void shouldMap() { + var mappedAntragsteller = mapper.fromOzgCloudAntragsteller(ozgCloudAntragsteller); + + assertThat(mappedAntragsteller).usingRecursiveComparison().isEqualTo(AntragstellerTestFactory.create()); + } + } + + @DisplayName("To grpc") + @Nested + class TestToGrpc { + + @BeforeEach() + void mock() { + when(formDataMapper.toGrpcFormData(any())).thenReturn(GrpcFormDataTestFactory.create()); + } + + @Test + void shouldCallFormDataEntryMapper() { + mapper.toGrpc(AntragstellerTestFactory.create()); + + verify(formDataMapper).toGrpcFormData(AntragstellerTestFactory.OTHER_DATA); + } + + @Test + void shouldMapToGrpc() { + var mappedAntragsteller = mapper.toGrpc(AntragstellerTestFactory.create()); + + assertThat(mappedAntragsteller).usingRecursiveComparison().ignoringFields("memoizedHashCode") + .isEqualTo(GrpcAntragstellerTestFactory.create()); + } + } + +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationEingangMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationEingangMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..8d8dc15a15d7ebc2c658e3f39d66f8717ba4ab8b --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationEingangMapperTest.java @@ -0,0 +1,153 @@ +package de.ozgcloud.collaboration.vorgang; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import de.ozgcloud.apilib.file.OzgCloudFile; +import de.ozgcloud.apilib.file.OzgCloudFileGroup; +import de.ozgcloud.apilib.file.OzgCloudFileTestFactory; +import de.ozgcloud.apilib.vorgang.OzgCloudAntragsteller; +import de.ozgcloud.apilib.vorgang.OzgCloudAntragstellerTestFactory; +import de.ozgcloud.apilib.vorgang.OzgCloudEingang; +import de.ozgcloud.apilib.vorgang.OzgCloudFormField; +import de.ozgcloud.apilib.vorgang.OzgCloudSubForm; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangEingangTestFactory; +import de.ozgcloud.apilib.vorgang.grpc.OzgCloudFileGroupTestFactory; + +class CollaborationEingangMapperTest { + + @InjectMocks + private final CollaborationEingangMapper mapper = Mappers.getMapper(CollaborationEingangMapper.class); + @Mock + private final CollaborationAntragstellerMapper antragstellerMapper = Mappers.getMapper(CollaborationAntragstellerMapper.class); + @Mock + private final CollaborationFileGroupMapper fileGroupMapper = Mappers.getMapper(CollaborationFileGroupMapper.class); + @Mock + private final CollaborationFileMapper fileMapper = Mappers.getMapper(CollaborationFileMapper.class); + @Mock + private final CollaborationFormDataMapper formDataMapper = Mappers.getMapper(CollaborationFormDataMapper.class); + + @DisplayName("From ozgCloudEingang") + @Nested + class TestFromOzgCloudEingang { + + private final OzgCloudAntragsteller ozgCloudAntragsteller = OzgCloudAntragstellerTestFactory.create(); + private final OzgCloudFile ozgCloudFile = OzgCloudFileTestFactory.create(); + private final OzgCloudFileGroup ozgCloudFileGroup = OzgCloudFileGroupTestFactory.createBuilder() + .clearFiles().file(ozgCloudFile) + .build(); + private final OzgCloudFormField ozgCloudFormField = OzgCloudFormField.builder() + .name(FormDataEntryTestFactory.FORM_FIELD_NAME) + .label(FormDataEntryTestFactory.FORM_FIELD_LABEL) + .value(FormDataEntryTestFactory.FORM_FIELD_VALUE) + .build(); + + private final OzgCloudFormField ozgCloudSubFormFormField = OzgCloudFormField.builder() + .name(FormDataEntryTestFactory.SUB_FORM_FIELD_NAME) + .label(FormDataEntryTestFactory.SUB_FORM_FIELD_LABEL) + .value(FormDataEntryTestFactory.SUB_FORM_FIELD_VALUE) + .build(); + + private final OzgCloudSubForm ozgCloudSubForm = OzgCloudSubForm.builder() + .name(FormDataEntryTestFactory.SUB_FORM_NAME) + .label(FormDataEntryTestFactory.SUB_FORM_LABEL) + .formEntry(ozgCloudSubFormFormField) + .build(); + + private final OzgCloudEingang ozgCloudEingang = OzgCloudVorgangEingangTestFactory.createBuilder() + .antragsteller(ozgCloudAntragsteller) + .clearAttachments().attachment(ozgCloudFileGroup) + .clearRepresentations().representation(ozgCloudFile) + .formDataEntrys(List.of(ozgCloudSubForm, ozgCloudFormField)) + .build(); + + @BeforeEach + void mock() { + when(antragstellerMapper.fromOzgCloudAntragsteller(any())).thenReturn(AntragstellerTestFactory.create()); + when(fileGroupMapper.fromOzgCloudFileGroup(any())).thenReturn(FileGroupTestFactory.create()); + when(fileMapper.fromOzgCloudFile(any())).thenReturn(FileTestFactory.create()); + when(formDataMapper.fromOzgCloudEntries(any())) + .thenReturn(List.of(FormDataEntryTestFactory.createFormField(), FormDataEntryTestFactory.createSubForm())); + } + + @Test + void shouldCallAntragstellerMapper() { + mapper.fromOzgCloudEingang(ozgCloudEingang); + + verify(antragstellerMapper).fromOzgCloudAntragsteller(ozgCloudAntragsteller); + } + + @Test + void shouldCallFileGroupMapper() { + mapper.fromOzgCloudEingang(ozgCloudEingang); + + verify(fileGroupMapper).fromOzgCloudFileGroup(ozgCloudFileGroup); + } + + @Test + void shouldCallFileMapper() { + mapper.fromOzgCloudEingang(ozgCloudEingang); + + verify(fileMapper).fromOzgCloudFile(ozgCloudFile); + } + + @Test + void shouldMap() { + var eingang = mapper.fromOzgCloudEingang(OzgCloudVorgangEingangTestFactory.create()); + + assertThat(eingang).usingRecursiveComparison().isEqualTo(EingangTestFactory.create()); + } + } + + @DisplayName("To grpc") + @Nested + class TestToGrpc { + + @BeforeEach + void mock() { + when(antragstellerMapper.toGrpc(any())).thenReturn(GrpcAntragstellerTestFactory.create()); + when(fileGroupMapper.toGrpc(any())).thenReturn(GrpcFileGroupTestFactory.create()); + when(fileMapper.toGrpc(any())).thenReturn(GrpcFileTestFactory.create()); + when(formDataMapper.toGrpcFormData(any())).thenReturn(GrpcFormDataTestFactory.create()); + } + + @Test + void shouldCallAntragstellerMapper() { + mapper.toGrpc(EingangTestFactory.create()); + + verify(antragstellerMapper).toGrpc(EingangTestFactory.ANTRAGSTELLER); + } + + @Test + void shouldCallFileGroupMapper() { + mapper.toGrpc(EingangTestFactory.create()); + + verify(fileGroupMapper).toGrpc(EingangTestFactory.ATTACHMENT); + } + + @Test + void shouldCallFileMapper() { + mapper.toGrpc(EingangTestFactory.create()); + + verify(fileMapper).toGrpc(EingangTestFactory.REPRESENTATION); + } + + @Test + void shouldMap() { + var eingang = mapper.toGrpc(EingangTestFactory.create()); + + assertThat(eingang).usingRecursiveComparison().ignoringFields("memoizedHashCode").isEqualTo(GrpcEingangTestFactory.create()); + } + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFileGroupMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFileGroupMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0f34589b0f4f38bf713408dece96c08d3dc6b67c --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFileGroupMapperTest.java @@ -0,0 +1,77 @@ +package de.ozgcloud.collaboration.vorgang; + +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.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import de.ozgcloud.apilib.file.OzgCloudFile; +import de.ozgcloud.apilib.file.OzgCloudFileGroup; +import de.ozgcloud.apilib.file.OzgCloudFileTestFactory; +import de.ozgcloud.apilib.vorgang.grpc.OzgCloudFileGroupTestFactory; + +class CollaborationFileGroupMapperTest { + + @InjectMocks + private final CollaborationFileGroupMapper mapper = Mappers.getMapper(CollaborationFileGroupMapper.class); + @Mock + private final CollaborationFileMapper fileMapper = Mappers.getMapper(CollaborationFileMapper.class); + + @DisplayName("From ozgCloudFileGroup") + @Nested + class TestFromOzgCloudFileGroup { + + private final OzgCloudFile ozgCloudFile = OzgCloudFileTestFactory.create(); + private final OzgCloudFileGroup ozgCloudFileGroup = OzgCloudFileGroupTestFactory.createBuilder().clearFiles().file(ozgCloudFile).build(); + + @BeforeEach + void mock() { + when(fileMapper.fromOzgCloudFile(any())).thenReturn(FileTestFactory.create()); + } + + @Test + void shouldCallFileMapper() { + mapper.fromOzgCloudFileGroup(ozgCloudFileGroup); + + verify(fileMapper).fromOzgCloudFile(ozgCloudFile); + } + + @Test + void shouldMap() { + var fileGroup = mapper.fromOzgCloudFileGroup(OzgCloudFileGroupTestFactory.create()); + + assertThat(fileGroup).usingRecursiveComparison().isEqualTo(FileGroupTestFactory.create()); + } + } + + @DisplayName("To grpc") + @Nested + class TestToGrpc { + + @BeforeEach + void mock() { + when(fileMapper.toGrpc(any())).thenReturn(GrpcFileTestFactory.create()); + } + + @Test + void shouldCallFileMapper() { + mapper.toGrpc(FileGroupTestFactory.create()); + + verify(fileMapper).toGrpc(FileGroupTestFactory.FILE); + } + + @Test + void shouldMap() { + var fileGroup = mapper.toGrpc(FileGroupTestFactory.create()); + + assertThat(fileGroup).usingRecursiveComparison().isEqualTo(GrpcFileGroupTestFactory.create()); + } + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFileMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFileMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..89d39fc4ca2e38e9cd182263960a0c40c1551b5f --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFileMapperTest.java @@ -0,0 +1,27 @@ +package de.ozgcloud.collaboration.vorgang; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +import de.ozgcloud.apilib.file.OzgCloudFileTestFactory; + +class CollaborationFileMapperTest { + + private final CollaborationFileMapper mapper = Mappers.getMapper(CollaborationFileMapper.class); + + @Test + void shouldMapFromOzgCloudFile() { + var file = mapper.fromOzgCloudFile(OzgCloudFileTestFactory.createBuilder().id(FileTestFactory.ID).build()); + + assertThat(file).usingRecursiveComparison().isEqualTo(FileTestFactory.create()); + } + + @Test + void shouldMapToGrpc() { + var file = mapper.toGrpc(FileTestFactory.create()); + + assertThat(file).usingRecursiveComparison().isEqualTo(GrpcFileTestFactory.create()); + } +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFormDataMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFormDataMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..319b7668c433d20de683f5290aa81f14c5f4d33d --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFormDataMapperTest.java @@ -0,0 +1,139 @@ +package de.ozgcloud.collaboration.vorgang; + +import static de.ozgcloud.collaboration.vorgang.FormDataEntryTestFactory.*; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; +import org.mockito.Spy; + +import de.ozgcloud.apilib.vorgang.OzgCloudFormDataEntry; +import de.ozgcloud.apilib.vorgang.OzgCloudFormField; +import de.ozgcloud.apilib.vorgang.OzgCloudSubForm; +import de.ozgcloud.collaboration.GrpcFormField; +import de.ozgcloud.collaboration.GrpcSubForm; +import de.ozgcloud.collaboration.GrpcSubFormData; + +class CollaborationFormDataMapperTest { + + @Spy + private final CollaborationFormDataMapper mapper = Mappers.getMapper(CollaborationFormDataMapper.class); + + @DisplayName("From ozgCloudEntries") + @Nested + class TestFromOzgCloudEntries { + + private final OzgCloudFormField ozgCloudFormField = OzgCloudFormField.builder().name(FORM_FIELD_NAME).label(FORM_FIELD_LABEL) + .value(FORM_FIELD_VALUE).build(); + private final OzgCloudSubForm ozgCloudSubForm = OzgCloudSubForm.builder().name(SUB_FORM_NAME).label(SUB_FORM_LABEL) + .formEntry(OzgCloudFormField.builder().name(SUB_FORM_FIELD_NAME).label(SUB_FORM_FIELD_LABEL).value(SUB_FORM_FIELD_VALUE).build()) + .build(); + private final List<OzgCloudFormDataEntry> ozgCloudEntries = List.of(ozgCloudFormField, ozgCloudSubForm); + + private final FormField formField = FormDataEntryTestFactory.createFormField(); + private final SubForm subForm = FormDataEntryTestFactory.createSubForm(); + + @BeforeEach + void mock() { + doReturn(formField).when(mapper).fromOzgCloudFormField(any()); + doReturn(subForm).when(mapper).fromOzgCloudSubForm(any()); + } + + @Test + void shouldMap() { + var entries = mapper.fromOzgCloudEntries(ozgCloudEntries); + + assertThat(entries).containsExactly(formField, subForm); + } + } + + @DisplayName("From ozgCloudSubForm") + @Nested + class TestFromOzgCloudSubForm { + + private final OzgCloudFormField ozgCloudFormField = OzgCloudFormField.builder() + .name(FormDataEntryTestFactory.FORM_FIELD_NAME) + .label(FormDataEntryTestFactory.FORM_FIELD_LABEL) + .value(FormDataEntryTestFactory.FORM_FIELD_VALUE) + .build(); + + private final OzgCloudFormField ozgCloudSubFormFormField = OzgCloudFormField.builder() + .name(FormDataEntryTestFactory.SUB_FORM_FIELD_NAME) + .label(FormDataEntryTestFactory.SUB_FORM_FIELD_LABEL) + .value(FormDataEntryTestFactory.SUB_FORM_FIELD_VALUE) + .build(); + private final OzgCloudSubForm ozgCloudSubForm = OzgCloudSubForm.builder() + .name(FormDataEntryTestFactory.SUB_FORM_NAME) + .label(FormDataEntryTestFactory.SUB_FORM_LABEL) + .formEntry(ozgCloudSubFormFormField) + .build(); + + @Test + void shouldMapFormField() { + var formField = mapper.fromOzgCloudFormField(ozgCloudFormField); + + assertThat(formField).usingRecursiveComparison().isEqualTo(FormDataEntryTestFactory.createFormField()); + } + + @Test + void shouldMapSubForm() { + var subForm = mapper.fromOzgCloudSubForm(ozgCloudSubForm); + + assertThat(subForm).usingRecursiveComparison().isEqualTo(FormDataEntryTestFactory.createSubForm()); + } + } + + @DisplayName("To grpcFormData") + @Nested + class TestToGrpcFormData { + + private final FormField formField = FormDataEntryTestFactory.createFormField(); + private final SubForm subForm = FormDataEntryTestFactory.createSubForm(); + private List<FormDataEntry> entries = List.of(formField, subForm); + + private final GrpcFormField grpcFormField = GrpcFormDataTestFactory.createFormField(); + private final GrpcSubForm grpcSubForm = GrpcFormDataTestFactory.createSubForm(); + + private final GrpcSubFormData grpcSubFormDataFormField = GrpcFormDataTestFactory.createSubFormDataField(); + private final GrpcSubFormData grpcSubFormDataSubForm = GrpcFormDataTestFactory.createSubFormDataForm(); + + @BeforeEach + void mock() { + doReturn(grpcFormField).when(mapper).toGrpcFormField(any()); + doReturn(grpcSubForm).when(mapper).toGrpcSubForm(any()); + } + + @Test + void shouldMap() { + var formData = mapper.toGrpcFormData(entries); + + assertThat(formData.getFormDataList()).containsExactly(grpcSubFormDataFormField, grpcSubFormDataSubForm); + } + } + + @DisplayName("To grpc") + @Nested + class TestToGrpc { + + @Test + void shouldMapFormField() { + var formField = mapper.toGrpcFormField(FormDataEntryTestFactory.createFormField()); + + assertThat(formField).usingRecursiveComparison().isEqualTo(GrpcFormDataTestFactory.createFormField()); + } + + @Test + void shouldMapSubForm() { + var subForm = mapper.toGrpcSubForm(FormDataEntryTestFactory.createSubForm()); + + assertThat(subForm).usingRecursiveComparison().isEqualTo(GrpcFormDataTestFactory.createSubForm()); + } + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationRequestTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..f934ea72fba99509a37fc792f7de28d777d08159 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationRequestTestFactory.java @@ -0,0 +1,19 @@ +package de.ozgcloud.collaboration.vorgang; + +import com.thedeanda.lorem.LoremIpsum; + +public class CollaborationRequestTestFactory { + + public static final String TITLE = LoremIpsum.getInstance().getWords(5); + public static final String TEXT = LoremIpsum.getInstance().getParagraphs(5, 20); + + public static CollaborationRequest create() { + return createBuilder().build(); + } + + public static CollaborationRequest.CollaborationRequestBuilder createBuilder() { + return CollaborationRequest.builder() + .title(TITLE) + .text(TEXT); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9d9e42a9a16070bb70aa471743d3f63369e66bad --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapperTest.java @@ -0,0 +1,91 @@ +package de.ozgcloud.collaboration.vorgang; + +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.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import de.ozgcloud.apilib.vorgang.OzgCloudEingang; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgang; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangEingangTestFactory; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory; + +class CollaborationVorgangMapperTest { + + @InjectMocks + private final CollaborationVorgangMapper mapper = Mappers.getMapper(CollaborationVorgangMapper.class); + @Mock + private final CollaborationEingangMapper eingangMapper = Mappers.getMapper(CollaborationEingangMapper.class); + @Mock + private final CollaborationRequestMapper collaborationRequestMapper = Mappers.getMapper(CollaborationRequestMapper.class); + + @DisplayName("From ozgCloudVorgang") + @Nested + class TestFromOzgCloudVorgang { + + private final OzgCloudEingang ozgCloudEingang = OzgCloudVorgangEingangTestFactory.create(); + private final OzgCloudVorgang ozgCloudVorgang = OzgCloudVorgangTestFactory.createBuilder() + .id(VorgangTestFactory.ID) + .clearEingangs().eingang(ozgCloudEingang) + .build(); + + @BeforeEach + void mock() { + when(eingangMapper.fromOzgCloudEingang(any())).thenReturn(EingangTestFactory.create()); + } + + @Test + void shouldCallEingangMapper() { + mapper.fromOzgCloudVorgang(ozgCloudVorgang); + + verify(eingangMapper).fromOzgCloudEingang(ozgCloudEingang); + } + + @Test + void shouldMap() { + var mappedVorgang = mapper.fromOzgCloudVorgang(ozgCloudVorgang); + + assertThat(mappedVorgang).usingRecursiveComparison().ignoringFields("collaborationRequest") + .isEqualTo(VorgangTestFactory.create()); + } + } + + @DisplayName("To grpc") + @Nested + class TestToGrpc { + + @BeforeEach + void mock() { + when(eingangMapper.toGrpc(any())).thenReturn(GrpcEingangTestFactory.create()); + when(collaborationRequestMapper.toGrpc(any())).thenReturn(GrpcCollaborationRequestTestFactory.create()); + } + + @Test + void shouldCallEingangMapper() { + mapper.toGrpc(VorgangTestFactory.create()); + + verify(eingangMapper).toGrpc(VorgangTestFactory.EINGANG); + } + + @Test + void shouldCallCollaborationRequestMapper() { + mapper.toGrpc(VorgangTestFactory.create()); + + verify(collaborationRequestMapper).toGrpc(VorgangTestFactory.COLLABORATION_REQUEST); + } + + @Test + void shouldMap() { + var vorgang = mapper.toGrpc(VorgangTestFactory.create()); + + assertThat(vorgang).usingRecursiveComparison().ignoringFields("memoizedHashCode").isEqualTo(GrpcVorgangTestFactory.create()); + } + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/EingangTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/EingangTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..13ecf8508a3eb39922b699da3233e419bc463abf --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/EingangTestFactory.java @@ -0,0 +1,26 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.util.List; + +public class EingangTestFactory { + + public final static Antragsteller ANTRAGSTELLER = AntragstellerTestFactory.create(); + public final static FileGroup ATTACHMENT = FileGroupTestFactory.create(); + public final static File REPRESENTATION = FileTestFactory.create(); + + public final static FormField FORM_FIELD = FormDataEntryTestFactory.createFormField(); + public final static SubForm SUB_FORM = FormDataEntryTestFactory.createSubForm(); + public final static List<FormDataEntry> FORM_DATA_ENTRIES = List.of(FORM_FIELD, SUB_FORM); + + public static Eingang create() { + return createBuilder().build(); + } + + public static Eingang.EingangBuilder createBuilder() { + return Eingang.builder() + .antragsteller(ANTRAGSTELLER) + .attachment(ATTACHMENT) + .representation(REPRESENTATION) + .formDataEntrys(FORM_DATA_ENTRIES); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FileGroupTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FileGroupTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..3323db42e4b248ec3183256f3cc18b9895624d48 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FileGroupTestFactory.java @@ -0,0 +1,18 @@ +package de.ozgcloud.collaboration.vorgang; + +public class FileGroupTestFactory { + + public static final String NAME = "File Group Name"; + + public static final File FILE = FileTestFactory.create(); + + public static FileGroup create() { + return createBuilder().build(); + } + + public static FileGroup.FileGroupBuilder createBuilder() { + return FileGroup.builder() + .name(NAME) + .file(FILE); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FileTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FileTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..49bc54e7ab2f126e5f8643ee9bffbca553328b10 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FileTestFactory.java @@ -0,0 +1,25 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.util.UUID; + +import de.ozgcloud.apilib.file.OzgCloudFileId; + +public class FileTestFactory { + + public static final OzgCloudFileId ID = OzgCloudFileId.from(UUID.randomUUID().toString()); + public static final String NAME = "testfile.pdf"; + public static final String CONTENT_TYPE = "application/pdf"; + public static final long SIZE = 1024; + + public static File create() { + return createBuilder().build(); + } + + public static File.FileBuilder createBuilder() { + return File.builder() + .id(ID) + .name(NAME) + .contentType(CONTENT_TYPE) + .size(SIZE); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FormDataEntryTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FormDataEntryTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..9c39cca8eb039edc4da181d5599b2123b798b633 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FormDataEntryTestFactory.java @@ -0,0 +1,41 @@ +package de.ozgcloud.collaboration.vorgang; + +public class FormDataEntryTestFactory { + + public final static String FORM_FIELD_NAME = "name"; + public final static String FORM_FIELD_LABEL = "label"; + public final static String FORM_FIELD_VALUE = "value"; + + public final static String SUB_FORM_NAME = "sub-form-name"; + public final static String SUB_FORM_LABEL = "sub-form-label"; + public final static String SUB_FORM_FIELD_NAME = "sub-form-field-name"; + public final static String SUB_FORM_FIELD_LABEL = "sub-form-field-label"; + public final static String SUB_FORM_FIELD_VALUE = "sub-form-field-value"; + public final static FormField SUB_FORM_FORM_FIELD = createFormFieldBuilder() + .name(SUB_FORM_FIELD_NAME) + .label(SUB_FORM_FIELD_LABEL) + .value(SUB_FORM_FIELD_VALUE) + .build(); + + public static FormField createFormField() { + return createFormFieldBuilder().build(); + } + + public static FormField.FormFieldBuilder createFormFieldBuilder() { + return FormField.builder() + .name(FORM_FIELD_NAME) + .label(FORM_FIELD_LABEL) + .value(FORM_FIELD_VALUE); + } + + public static SubForm createSubForm() { + return createSubFormBuilder().build(); + } + + public static SubForm.SubFormBuilder createSubFormBuilder() { + return SubForm.builder() + .name(SUB_FORM_NAME) + .label(SUB_FORM_LABEL) + .formEntry(SUB_FORM_FORM_FIELD); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcAntragstellerTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcAntragstellerTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..6d055fc0d8b826f8e95a6f7584cedcbd9e1c90d7 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcAntragstellerTestFactory.java @@ -0,0 +1,30 @@ +package de.ozgcloud.collaboration.vorgang; + +import static de.ozgcloud.collaboration.vorgang.AntragstellerTestFactory.*; + +import de.ozgcloud.collaboration.GrpcAntragsteller; + +public class GrpcAntragstellerTestFactory { + + public static GrpcAntragsteller create() { + return createBuilder().build(); + } + + public static GrpcAntragsteller.Builder createBuilder() { + return GrpcAntragsteller.newBuilder() + .setAnrede(ANREDE) + .setVorname(FIRSTNAME) + .setNachname(NACHNAME) + .setFirmaName(FIRMA_NAME) + .setGeburtsdatum(GEBURTSDATUM) + .setGeburtsort(GEBURTSORT) + .setGeburtsname(GEBURTSNAME) + .setStrasse(STRASSE) + .setHausnummer(HAUSNUMMER) + .setPlz(PLZ) + .setOrt(ORT) + .setEmail(E_MAIL) + .setTelefon(TELEFON) + .setOtherData(GrpcFormDataTestFactory.create()); + } +} \ 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 new file mode 100644 index 0000000000000000000000000000000000000000..382a7ab7957b016041f4a33a7b8b0263ecc8dbeb --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcCollaborationRequestTestFactory.java @@ -0,0 +1,18 @@ +package de.ozgcloud.collaboration.vorgang; + +import static de.ozgcloud.collaboration.vorgang.CollaborationRequestTestFactory.*; + +import de.ozgcloud.collaboration.GrpcCollaborationRequest; + +public class GrpcCollaborationRequestTestFactory { + + public static GrpcCollaborationRequest create() { + return createBuilder().build(); + } + + public static GrpcCollaborationRequest.Builder createBuilder() { + return GrpcCollaborationRequest.newBuilder() + .setTitle(TITLE) + .setText(TEXT); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcEingangTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcEingangTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..250a7a8e4f1f098f9a15ec3dd8709cf7a16abb6c --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcEingangTestFactory.java @@ -0,0 +1,18 @@ +package de.ozgcloud.collaboration.vorgang; + +import de.ozgcloud.collaboration.GrpcEingang; + +public class GrpcEingangTestFactory { + + public static GrpcEingang create() { + return createBuilder().build(); + } + + public static GrpcEingang.Builder createBuilder() { + return GrpcEingang.newBuilder() + .setAntragsteller(GrpcAntragstellerTestFactory.create()) + .addAttachments(GrpcFileGroupTestFactory.create()) + .addRepresentations(GrpcFileTestFactory.create()) + .setFormData(GrpcFormDataTestFactory.create()); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFileGroupTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFileGroupTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..17345509931cbc6d9e689e565a1347db0bc02da0 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFileGroupTestFactory.java @@ -0,0 +1,18 @@ +package de.ozgcloud.collaboration.vorgang; + +import static de.ozgcloud.collaboration.vorgang.FileGroupTestFactory.*; + +import de.ozgcloud.collaboration.GrpcFileGroup; + +public class GrpcFileGroupTestFactory { + + public static GrpcFileGroup create() { + return createBuilder().build(); + } + + public static GrpcFileGroup.Builder createBuilder() { + return GrpcFileGroup.newBuilder() + .setName(NAME) + .addFiles(GrpcFileTestFactory.create()); + } +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFileTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFileTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..2eda2e0ec02851dbf682f09bd9db9011de657e1e --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFileTestFactory.java @@ -0,0 +1,20 @@ +package de.ozgcloud.collaboration.vorgang; + +import static de.ozgcloud.collaboration.vorgang.FileTestFactory.*; + +import de.ozgcloud.collaboration.GrpcFile; + +public class GrpcFileTestFactory { + + public static GrpcFile create() { + return createBuilder().build(); + } + + public static GrpcFile.Builder createBuilder() { + return GrpcFile.newBuilder() + .setId(ID.toString()) + .setName(NAME) + .setContentType(CONTENT_TYPE) + .setSize(SIZE); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFormDataTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFormDataTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..9e12a1cd2cdba573bcf66a39f4e1edcf2f0baf5a --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFormDataTestFactory.java @@ -0,0 +1,56 @@ +package de.ozgcloud.collaboration.vorgang; + +import de.ozgcloud.collaboration.GrpcFormData; +import de.ozgcloud.collaboration.GrpcFormField; +import de.ozgcloud.collaboration.GrpcSubForm; +import de.ozgcloud.collaboration.GrpcSubFormData; + +public class GrpcFormDataTestFactory { + + public static final GrpcSubFormData SUB_FORM_FORM_FIELD = GrpcSubFormData.newBuilder().setField( + GrpcFormField.newBuilder() + .setName(FormDataEntryTestFactory.SUB_FORM_FIELD_NAME) + .setValue(FormDataEntryTestFactory.SUB_FORM_FIELD_VALUE) + .setLabel(FormDataEntryTestFactory.SUB_FORM_FIELD_LABEL).build()) + .build(); + + public static final GrpcFormData create() { + return createBuilder().build(); + } + + public static final GrpcFormData.Builder createBuilder() { + return GrpcFormData.newBuilder() + .addFormData(createSubFormDataForm()) + .addFormData(createSubFormDataField()); + } + + public static final GrpcSubFormData createSubFormDataForm() { + return GrpcSubFormData.newBuilder().setForm(createSubForm()).build(); + } + + public static final GrpcSubForm createSubForm() { + return createSubFormBuilder().build(); + } + + public static final GrpcSubForm.Builder createSubFormBuilder() { + return GrpcSubForm.newBuilder() + .setName(FormDataEntryTestFactory.SUB_FORM_NAME) + .setLabel(FormDataEntryTestFactory.SUB_FORM_LABEL) + .addFormData(SUB_FORM_FORM_FIELD); + } + + public static final GrpcSubFormData createSubFormDataField() { + return GrpcSubFormData.newBuilder().setField(createFormField()).build(); + } + + public static final GrpcFormField createFormField() { + return createFormFieldBuilder().build(); + } + + public static final GrpcFormField.Builder createFormFieldBuilder() { + return GrpcFormField.newBuilder() + .setName(FormDataEntryTestFactory.FORM_FIELD_NAME) + .setValue(FormDataEntryTestFactory.FORM_FIELD_VALUE) + .setLabel(FormDataEntryTestFactory.FORM_FIELD_LABEL); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcVorgangHeaderTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcVorgangHeaderTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..9eb723cddf1961777fa375d77b985a0749a62882 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcVorgangHeaderTestFactory.java @@ -0,0 +1,27 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.time.ZonedDateTime; +import java.util.UUID; + +import de.ozgcloud.apilib.user.OzgCloudUserId; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStatus; +import de.ozgcloud.collaboration.GrpcVorgangHeader; + +public class GrpcVorgangHeaderTestFactory { + + public final static OzgCloudVorgangStatus STATUS = OzgCloudVorgangStatus.from("WORKING"); + public final static String CREATED_AT_STR = "2023-04-01T10:00:15Z"; + public final static ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); + public final static OzgCloudUserId ASSIGNED_TO = OzgCloudUserId.from(UUID.randomUUID().toString()); + public final static String AKTENZEICHEN = "DE_12345_XY"; + + public static GrpcVorgangHeader create() { + return createBuilder().build(); + } + + public static GrpcVorgangHeader.Builder createBuilder() { + return GrpcVorgangHeader.newBuilder() + .setCreatedAt(CREATED_AT_STR) + .setAktenzeichen(AKTENZEICHEN); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcVorgangTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcVorgangTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..73d85ddb6d844cd850b090119a9d67a7b7f446d2 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcVorgangTestFactory.java @@ -0,0 +1,23 @@ +package de.ozgcloud.collaboration.vorgang; + +import static de.ozgcloud.collaboration.vorgang.VorgangTestFactory.*; + +import de.ozgcloud.collaboration.GrpcVorgang; + +public class GrpcVorgangTestFactory { + + public static GrpcVorgang create() { + return createBuilder().build(); + } + + public static GrpcVorgang.Builder createBuilder() { + return GrpcVorgang.newBuilder() + .setId(ID.toString()) + .setVersion(VERSION) + .setVorgangName(VORGANG_NAME) + .setVorgangNummer(VORGANG_NUMMER) + .setHeader(GrpcVorgangHeaderTestFactory.create()) + .setEingang(GrpcEingangTestFactory.create()) + .setCollaborationRequest(GrpcCollaborationRequestTestFactory.create()); + } +} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangHeaderTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangHeaderTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..0dd77436474c823413748fe40134f5032e35fda0 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangHeaderTestFactory.java @@ -0,0 +1,20 @@ +package de.ozgcloud.collaboration.vorgang; + +import java.time.ZonedDateTime; + +class VorgangHeaderTestFactory { + + public final static String CREATED_AT_STR = "2023-04-01T10:00:15Z"; + public final static ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); + public final static String AKTENZEICHEN = "DE_12345_XY"; + + public static VorgangHeader create() { + return createBuilder().build(); + } + + public static VorgangHeader.VorgangHeaderBuilder createBuilder() { + return VorgangHeader.builder() + .createdAt(CREATED_AT) + .aktenzeichen(AKTENZEICHEN); + } +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteServiceTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteServiceTest.java index e0ca71a149a516a4b63481fbeff58cd43e33031c..28a3dc99931cc6127dd3368c80622da58cc7644b 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteServiceTest.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteServiceTest.java @@ -24,6 +24,7 @@ package de.ozgcloud.collaboration.vorgang; import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import org.junit.jupiter.api.BeforeEach; @@ -33,6 +34,9 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgang; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory; import de.ozgcloud.collaboration.CollaborationCallContextAttachingInterceptor; import de.ozgcloud.collaboration.CollaborationManagerCollaborationRequestMapper; import de.ozgcloud.collaboration.CollaborationRequest; @@ -55,7 +59,10 @@ class VorgangRemoteServiceTest { private CollaborationManagerCollaborationRequestMapper collaborationRequestMapper; @Mock private CollaborationCallContextAttachingInterceptor callContextInterceptor; - + @Mock + private OzgCloudVorgangService ozgCloudVorgangService; + @Mock + private CollaborationVorgangMapper mapper; @Nested class TestCreateCollaborationVorgang { @@ -150,4 +157,37 @@ class VorgangRemoteServiceTest { } } + @Nested + class TestGetVorgang { + + private static final OzgCloudVorgang OZG_CLOUD_VORGANG = OzgCloudVorgangTestFactory.create(); + private static final Vorgang VORGANG = VorgangTestFactory.create(); + + @BeforeEach + void init() { + when(ozgCloudVorgangService.getById(any())).thenReturn(OZG_CLOUD_VORGANG); + when(mapper.fromOzgCloudVorgang(any())).thenReturn(VORGANG); + } + + @Test + void shouldCallOzgCloudVorgangService() { + service.getVorgang(OzgCloudVorgangTestFactory.ID); + + verify(ozgCloudVorgangService).getById(OzgCloudVorgangTestFactory.ID); + } + + @Test + void shouldCallMapper() { + service.getVorgang(OzgCloudVorgangTestFactory.ID); + + verify(mapper).fromOzgCloudVorgang(OZG_CLOUD_VORGANG); + } + + @Test + void shouldReturnVorgang() { + var result = service.getVorgang(OzgCloudVorgangTestFactory.ID); + + assertThat(result).isSameAs(VORGANG); + } + } } \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangServiceTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangServiceTest.java index 5e00c47b4f2c8d7c84871eb12d7483f233e33c03..52da9558c1de60b5ca18434929039a2104ae7bcd 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangServiceTest.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangServiceTest.java @@ -24,13 +24,16 @@ package de.ozgcloud.collaboration.vorgang; 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 de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory; import de.ozgcloud.collaboration.CollaborationRequest; import de.ozgcloud.collaboration.CollaborationRequestTestFactory; import de.ozgcloud.command.CommandTestFactory; @@ -65,4 +68,32 @@ class VorgangServiceTest { } } + @Nested + class TestGetVorgang { + + private static final Vorgang VORGANG = VorgangTestFactory.create(); + + @BeforeEach + void setUp() { + when(vorgangRemoteService.getVorgang(any())).thenReturn(VORGANG); + } + + @Test + void shouldCallGetVorgang() { + getVorgang(); + + verify(vorgangRemoteService).getVorgang(OzgCloudVorgangTestFactory.ID); + } + + @Test + void shouldReturnVorgang() { + var result = getVorgang(); + + assertThat(result).isEqualTo(VORGANG); + } + + private Vorgang getVorgang() { + return service.getVorgang(OzgCloudVorgangTestFactory.ID.toString()); + } + } } \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..2781da2948a509c4fd0195528eeadb993cfbf826 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangTestFactory.java @@ -0,0 +1,56 @@ +/* + * 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.vorgang; + +import java.util.UUID; + +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; + +public class VorgangTestFactory { + + public static final OzgCloudVorgangId ID = OzgCloudVorgangId.from(UUID.randomUUID().toString()); + public static final long VERSION = 42L; + + public static final String VORGANG_NAME = "Antrag auf Waffelschein"; + public static final String VORGANG_NUMMER = "123-abc-XY"; + + public static final VorgangHeader HEADER = VorgangHeaderTestFactory.create(); + public static final Eingang EINGANG = EingangTestFactory.create(); + public static final CollaborationRequest COLLABORATION_REQUEST = CollaborationRequestTestFactory.create(); + + public static Vorgang create() { + return createBuilder().build(); + } + + public static Vorgang.VorgangBuilder createBuilder() { + return Vorgang.builder() + .id(ID) + .version(VERSION) + .vorgangName(VORGANG_NAME) + .vorgangNummer(VORGANG_NUMMER) + .header(HEADER) + .eingang(EINGANG) + .collaborationRequest(COLLABORATION_REQUEST); + } +} \ No newline at end of file