diff --git a/Jenkinsfile b/Jenkinsfile index 911a5f66401da2ca5bcc05f910a19b8a3cb2b5ee..d70d4193a939c1b097d6c46db850fb1194a8367c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -58,13 +58,17 @@ pipeline { script { FAILED_STAGE=env.STAGE_NAME JAR_TAG = getPomVersion('pom.xml').replace("SNAPSHOT", "${env.BRANCH_NAME}-SNAPSHOT") + BESCHEID_MANAGER_TAG = getPomVersion('bescheid-manager/pom.xml').replace("SNAPSHOT", "${env.BRANCH_NAME}-SNAPSHOT") + updateBescheidManagerDependencyVersion(BESCHEID_MANAGER_TAG) } configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { sh "mvn -s $MAVEN_SETTINGS versions:set -DnewVersion=${JAR_TAG} -DprocessAllModules=true" - + dir('bescheid-manager') { + sh "mvn -s $MAVEN_SETTINGS versions:set -DnewVersion=${BESCHEID_MANAGER_TAG}" + } } } - } + } stage('Build VorgangManager') { steps { @@ -85,7 +89,6 @@ pipeline { } configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS -DskipTests deploy -Dmaven.wagon.http.retryHandler.count=3' - sh "mvn -s $MAVEN_SETTINGS versions:revert" } } } @@ -285,6 +288,14 @@ String getPomVersion(String pomFile){ return pom.version } +void updateBescheidManagerDependencyVersion(String snapshotVersion) { + def vorgangManagerServerPom = readMavenPom file: 'vorgang-manager-server/pom.xml' + if ( vorgangManagerServerPom.properties['bescheid-manager.version'] ==~ SNAPSHOT_REGEX ) { + vorgangManagerServerPom.properties['bescheid-manager.version'] = snapshotVersion + writeMavenPom model: vorgangManagerServerPom, file: 'vorgang-manager-server/pom.xml' + } +} + String generateImageTag(String pomFile) { def imageTag = "${env.BRANCH_NAME}-${getPomVersion(pomFile)}" diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index 0f7d64c45be81fd4a74e0ccc903d3fd5a4a895d8..bd10da5fa4d69478e1a1455cb46e0cbd5569619c 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -5,19 +5,19 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.3.0</version> + <version>4.3.1</version> <relativePath /> </parent> <groupId>de.ozgcloud.bescheid</groupId> <artifactId>bescheid-manager</artifactId> <name>OZG-Cloud Bescheid Manager</name> - <version>1.15.0-SNAPSHOT</version> + <version>1.16.0-SNAPSHOT</version> <properties> <vorgang-manager.version>2.9.0</vorgang-manager.version> <nachrichten-manager.version>2.9.0</nachrichten-manager.version> - <api-lib.version>0.11.0-SNAPSHOT</api-lib.version> + <api-lib.version>0.11.0</api-lib.version> </properties> <dependencies> diff --git a/pom.xml b/pom.xml index 1b9b61485236e8343cc4790763c73dde40c7512f..0a20e3d2ec89a89d6e7103b2e53461e7447187ba 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager</artifactId> - <version>2.11.0-SNAPSHOT</version> + <version>2.12.0-SNAPSHOT</version> <name>OZG-Cloud Vorgang Manager</name> <packaging>pom</packaging> diff --git a/vorgang-manager-base/pom.xml b/vorgang-manager-base/pom.xml index 01a891cafa5c98d4a5bf87091817403b5c6a9f88..7b7dee119eeb34d56968792c0c3930487b9c2cde 100644 --- a/vorgang-manager-base/pom.xml +++ b/vorgang-manager-base/pom.xml @@ -6,13 +6,13 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.3.0</version> + <version>4.3.1</version> <relativePath /> </parent> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-base</artifactId> - <version>2.11.0-SNAPSHOT</version> + <version>2.12.0-SNAPSHOT</version> <name>OZG-Cloud Vorgang Manager Base</name> diff --git a/vorgang-manager-command/pom.xml b/vorgang-manager-command/pom.xml index 1427d6e703f39962af7b6136e3319e01c87022e2..7d14579dc40eaa46841c7593ca57835504aeff36 100644 --- a/vorgang-manager-command/pom.xml +++ b/vorgang-manager-command/pom.xml @@ -4,13 +4,13 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-dependencies</artifactId> - <version>4.3.0</version> + <version>4.3.1</version> <relativePath/> </parent> <groupId>de.ozgcloud.command</groupId> <artifactId>command-manager</artifactId> - <version>2.11.0-SNAPSHOT</version> + <version>2.12.0-SNAPSHOT</version> <name>OZG-Cloud Command Manager</name> <properties> diff --git a/vorgang-manager-interface/pom.xml b/vorgang-manager-interface/pom.xml index c64435edbd2a453b7b75be55b0647d46ac6d644b..1b23a9b26060e4215164dea88a39c6d4006130c4 100644 --- a/vorgang-manager-interface/pom.xml +++ b/vorgang-manager-interface/pom.xml @@ -30,13 +30,13 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-dependencies</artifactId> - <version>4.3.0</version> + <version>4.3.1</version> <relativePath/> </parent> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-interface</artifactId> - <version>2.11.0-SNAPSHOT</version> + <version>2.12.0-SNAPSHOT</version> <name>OZG-Cloud Vorgang Manager gRPC Interface</name> <description>Interface (gRPC) for Vorgang Manager Server</description> diff --git a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto index dc8cc1c5bc16b8277a61fd4b7741fc2fe921c924..76157a12e40b638a00ca020bfde221706b1cc3ef 100644 --- a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto +++ b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto @@ -197,3 +197,18 @@ message GrpcVorgangQueryExpression { } } +message GrpcCreateCollaborationVorgangRequest { + oneof request { + GrpcCollaborationRequest collaborationRequest = 1; + } +} + +message GrpcCollaborationRequest { + string vorgangId = 1; + int32 collaborationLevel = 2; + string zustaendigeStelle = 3; +} + +message GrpcCreateCollaborationVorgangResponse { + string vorgangId = 1; +} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/vorgang.proto b/vorgang-manager-interface/src/main/protobuf/vorgang.proto index 03e9adb797364be086db096b01e345cbae88fb85..ff73c52cb2a072c011e318fd88000c79300dc48b 100644 --- a/vorgang-manager-interface/src/main/protobuf/vorgang.proto +++ b/vorgang-manager-interface/src/main/protobuf/vorgang.proto @@ -44,6 +44,9 @@ service VorgangService { rpc FinishCreation(GrpcFinishCreationRequest) returns (GrpcFinishCreationResponse) { } + + rpc CreateCollaborationVorgang(GrpcCreateCollaborationVorgangRequest) returns (GrpcCreateCollaborationVorgangResponse) { + } } message GrpcCreateVorgangRequest { diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index 1d0e1c0689976082d253db668465fb2f937c4972..6c5eee9ef85737264699865c934f72541dff5260 100644 --- a/vorgang-manager-server/pom.xml +++ b/vorgang-manager-server/pom.xml @@ -32,13 +32,13 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.3.0</version> + <version>4.3.1</version> <relativePath /> </parent> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-server</artifactId> - <version>2.11.0-SNAPSHOT</version> + <version>2.12.0-SNAPSHOT</version> <name>OZG-Cloud Vorgang Manager Server</name> <description>Server Implementierung des VorgangManagers</description> @@ -53,11 +53,12 @@ <zufi-manager-interface.version>1.0.0</zufi-manager-interface.version> <user-manager-interface.version>2.1.0</user-manager-interface.version> - <bescheid-manager.version>1.15.0-SNAPSHOT</bescheid-manager.version> + <bescheid-manager.version>1.16.0-SNAPSHOT</bescheid-manager.version> <processor-manager.version>0.4.1</processor-manager.version> - <nachrichten-manager.version>2.10.0-SNAPSHOT</nachrichten-manager.version> + <nachrichten-manager.version>2.11.0-SNAPSHOT</nachrichten-manager.version> <ozgcloud-starter.version>0.10.0</ozgcloud-starter.version> - <notification-manager.version>2.8.0</notification-manager.version> + <notification-manager.version>2.9.0</notification-manager.version> + <collaboration-manager.version>0.1.0-SNAPSHOT</collaboration-manager.version> <zip.version>2.11.1</zip.version> <jsoup.version>1.15.3</jsoup.version> @@ -151,6 +152,11 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>de.ozgcloud.collaboration</groupId> + <artifactId>collaboration-manager-server</artifactId> + <version>${collaboration-manager.version}</version> + </dependency> <!-- Spring --> <dependency> diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationRepository.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..a4dcbf254763851b9dc6980bc0102d0600827840 --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationRepository.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.collaboration; + +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.stereotype.Repository; + +import de.ozgcloud.vorgang.vorgang.Vorgang; +import lombok.RequiredArgsConstructor; + +@Repository +@RequiredArgsConstructor +class CollaborationRepository { + + private final MongoOperations mongoOperations; + + public Vorgang save(Vorgang vorgang) { + return mongoOperations.save(vorgang); + } + +} diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationService.java new file mode 100644 index 0000000000000000000000000000000000000000..763856b36699f916425c90f13b512ffae5982bce --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationService.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.collaboration; + +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; + +import de.ozgcloud.vorgang.vorgang.Vorgang; +import de.ozgcloud.vorgang.vorgang.VorgangHead; +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class CollaborationService { + + private final CollaborationRepository collaborationRepository; + private final ApplicationEventPublisher publisher; + + public Vorgang createCollaborationVorgang(CreateCollaborationVorgangRequest request) { + var vorgang = collaborationRepository.save(buildCollaborationVorgang(request)); + // TODO: wieder aktivieren wenn OZG-6380 implementiert ist + // publisher.publishEvent(new VorgangCreatedEvent(vorgang.getId())); + return vorgang; + } + + Vorgang buildCollaborationVorgang(CreateCollaborationVorgangRequest request) { + var srcVorgang = request.getVorgang(); + return Vorgang.builder() + .name(srcVorgang.getName()) + .nummer(srcVorgang.getNummer()) + .formEngineName(srcVorgang.getFormEngineName()) + .aktenzeichen(srcVorgang.getAktenzeichen()) + .header(getHeader(request)) + .eingangs(srcVorgang.getEingangs()) + .build(); + } + + VorgangHead getHeader(CreateCollaborationVorgangRequest request) { + return request.getVorgang().getHeader().toBuilder() + .collaborationLevel(request.getCollaborationLevel()) + .organisationsEinheitId(request.getZustaendigeStelle()) + .build(); + } +} diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangBadRequestException.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangBadRequestException.java new file mode 100644 index 0000000000000000000000000000000000000000..b2d35ef9553325cc6b97b5be1deb09b0ef315b0d --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangBadRequestException.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.collaboration; + +import de.ozgcloud.vorgang.common.errorhandling.FunctionalException; + +public class CreateCollaborationVorgangBadRequestException extends FunctionalException { + + public CreateCollaborationVorgangBadRequestException(String message) { + super(message, () -> "CREATE_COLLABORATION_VORGANG.BAD_REQUEST"); + } + +} diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequest.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..44f61fed6d4ea63527907176ab79f790fdc534d0 --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequest.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.collaboration; + +import de.ozgcloud.vorgang.vorgang.Vorgang; +import lombok.Builder; +import lombok.Getter; + +@Builder(toBuilder = true) +@Getter +public class CreateCollaborationVorgangRequest { + + private Vorgang vorgang; + private int collaborationLevel; + private String zustaendigeStelle; +} diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapper.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..28c23c3d257a9bc371fcd54dd1eaed57cd2166a7 --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapper.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.collaboration; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.vorgang.vorgang.GrpcCollaborationRequest; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) +public interface CreateCollaborationVorgangRequestMapper { + + @Mapping(target = "vorgang", ignore = true) + CreateCollaborationVorgangRequest mapFrom(GrpcCollaborationRequest grpcCollaborationRequest); +} diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangService.java index 56d7db937e4dc37c69cf806d51cce64a0aeb08f1..647303f1968fcf6ae80edad3dbe42e87497e6579 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangService.java @@ -23,33 +23,31 @@ */ package de.ozgcloud.vorgang.vorgang; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; +import de.ozgcloud.vorgang.collaboration.CollaborationService; +import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangBadRequestException; +import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangRequest; +import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangRequestMapper; import io.grpc.stub.StreamObserver; +import lombok.RequiredArgsConstructor; import net.devh.boot.grpc.server.service.GrpcService; @GrpcService +@RequiredArgsConstructor class GrpcVorgangService extends VorgangServiceGrpc.VorgangServiceImplBase { - @Autowired - private VorgangService vorgangService; - @Autowired - private VorgangHeaderService vorgangHeaderService; - @Autowired - private EingangMapper eingangMapper; - @Autowired - private VorgangHeaderMapper vorgangHeaderMapper; - @Autowired - private VorgangWithEingangMapper vorgangWithEingangMapper; - @Autowired - private FindVorgangRequestMapper findVorgangRequestMapper; - @Autowired - private FilterByMapper filterByMapper; - @Autowired - private IncomingFileMapper incomingFileMapper; - @Autowired - private IncomingFileGroupMapper incomingFileGroupMapper; + private final VorgangService vorgangService; + private final VorgangHeaderService vorgangHeaderService; + private final EingangMapper eingangMapper; + private final VorgangHeaderMapper vorgangHeaderMapper; + private final VorgangWithEingangMapper vorgangWithEingangMapper; + private final FindVorgangRequestMapper findVorgangRequestMapper; + private final FilterByMapper filterByMapper; + private final IncomingFileMapper incomingFileMapper; + private final IncomingFileGroupMapper incomingFileGroupMapper; + private final CollaborationService collaborationService; + private final CreateCollaborationVorgangRequestMapper createCollaborationVorgangRequestMapper; @Override public void startCreation(GrpcCreateVorgangRequest request, StreamObserver<GrpcCreateVorgangResponse> responseObserver) { @@ -113,4 +111,31 @@ class GrpcVorgangService extends VorgangServiceGrpc.VorgangServiceImplBase { .setVorgangWithEingang(vorgangWithEingangMapper.toVorgangWithEingang(vorgang)) .build(); } + + @Override + public void createCollaborationVorgang(GrpcCreateCollaborationVorgangRequest request, + StreamObserver<GrpcCreateCollaborationVorgangResponse> responseObserver) { + GrpcCreateCollaborationVorgangResponse response; + if (request.hasCollaborationRequest()) { + response = createCollaborationVorgang(request.getCollaborationRequest()); + } else { + throw new CreateCollaborationVorgangBadRequestException("Cannot create collaboration vorgang. Collaboration request is empty."); + } + responseObserver.onNext(response); + responseObserver.onCompleted(); + } + + GrpcCreateCollaborationVorgangResponse createCollaborationVorgang(GrpcCollaborationRequest request) { + var collaborationVorgang = collaborationService.createCollaborationVorgang(buildCreateCollaborationVorgangRequest(request)); + return buildCreateCollaborationVorgangResponse(collaborationVorgang); + } + + CreateCollaborationVorgangRequest buildCreateCollaborationVorgangRequest(GrpcCollaborationRequest request) { + var vorgang = vorgangService.getById(request.getVorgangId()); + return createCollaborationVorgangRequestMapper.mapFrom(request).toBuilder().vorgang(vorgang).build(); + } + + GrpcCreateCollaborationVorgangResponse buildCreateCollaborationVorgangResponse(Vorgang vorgang) { + return GrpcCreateCollaborationVorgangResponse.newBuilder().setVorgangId(vorgang.getId()).build(); + } } \ No newline at end of file diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHead.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHead.java index cc6c36f1f60d8aa55082ffd0304ef699f5cf1041..13e858035e377296843b70740e23c96ca3c3485e 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHead.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHead.java @@ -6,7 +6,7 @@ import de.ozgcloud.vorgang.servicekonto.ServiceKonto; import lombok.Builder; import lombok.Getter; -@Builder +@Builder(toBuilder = true) @Getter @TypeAlias("VorgangHeader") public class VorgangHead { @@ -14,4 +14,6 @@ public class VorgangHead { private ServiceKonto serviceKonto; private String organisationsEinheitId; + @Builder.Default + private int collaborationLevel = 0; } diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangService.java index a6315672327389de9cc133226f0debe77e2a228c..3b69aa9e535b41598d1f2d76f9645436e3c8e75c 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangService.java @@ -153,9 +153,8 @@ public class VorgangService { return addLabels(loaded); } - public void setAktenzeichen(Command command) { - var aktenzeichen = StringUtils.trimToNull(MapUtils.getString(command.getBodyObject(), BODY_OBJECT_AKTENZEICHEN)); - repository.setAktenzeichen(command.getVorgangId(), command.getRelationVersion(), aktenzeichen); + public Vorgang getOriginalVorgangById(String vorgangId) { + return removeUnpermittedClientAttributes(loadById(vorgangId)); } Vorgang removeUnpermittedClientAttributes(Vorgang vorgang) { @@ -182,6 +181,11 @@ public class VorgangService { return Pair.of(entry.getKey(), resultAttributeMap); } + public void setAktenzeichen(Command command) { + var aktenzeichen = StringUtils.trimToNull(MapUtils.getString(command.getBodyObject(), BODY_OBJECT_AKTENZEICHEN)); + repository.setAktenzeichen(command.getVorgangId(), command.getRelationVersion(), aktenzeichen); + } + public void assignToUser(Command command) { var patch = Map.<String, Object>of(Vorgang.MONGODB_FIELDNAME_ASSIGNED_TO, command.getBody().get(BODY_ASSIGNED_TO_FIELD)); diff --git a/vorgang-manager-server/src/main/resources/bayernid/keycloak-saml-metadata.xml b/vorgang-manager-server/src/main/resources/bayernid/keycloak-saml-metadata.xml new file mode 100644 index 0000000000000000000000000000000000000000..b5746cf909d209910496f9ffef142f748c9378e9 --- /dev/null +++ b/vorgang-manager-server/src/main/resources/bayernid/keycloak-saml-metadata.xml @@ -0,0 +1,25 @@ +<md:EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp"> +<md:IDPSSODescriptor WantAuthnRequestsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> +<md:KeyDescriptor use="signing"> +<ds:KeyInfo> +<ds:KeyName>qO7IAjV9WUVVahQd9b1LGC1jAn9zMWV8oiPeafCAfdM</ds:KeyName> +<ds:X509Data> +<ds:X509Certificate>MIICszCCAZsCBgGRLC9tAjANBgkqhkiG9w0BAQsFADAdMRswGQYDVQQDDBJieS1hbnRyYWdzcmF1bS1pZHAwHhcNMjQwODA3MDkzMTMxWhcNMzQwODA3MDkzMzExWjAdMRswGQYDVQQDDBJieS1hbnRyYWdzcmF1bS1pZHAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo2RVcJYiqv000dk20VBv6952+FXjEa1BzSzlX1vs4IrpWCVNQfsmZ4ZAg7TBlwJiBHtx0zMtM6DyHQthTVf/E/aaZvBtobUlLt/A/hy/Q31SkzScUgLZy4Nm+kIfmwHRj5/Mo9/53NCYfHcRV0nmRISPj9XsGIjjU6UWEb8sjhQC3OJJg4rWeXKzGNQfGIaMeYmSu0dPfDGo1g08jTMVhgMbF2vystHv4W6dC1q2r6Sp7SrdfXIkkaK2WZcHaqJ1uWWzw6rZMA5vjVdm/djdUN/RHeKpw2d8lD9B/a9+swJJ59cccuk7izqIgXMP2OPBG8qroqOydkyG9huma9C9JAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAAcQlpbNPvut1HjJ0Xlk8iyt6u43CvBhNpMPFdBcUPzdSlehiifmo214HOVIacBz7DAv+TzLXKDLsd+RNJkh3s+bEbA6C9lnYwOwi6jJy7Wp0Zsndks0Qf2b/jPYSBvUzFKx0v9w28kUS563ErQXF+TErqsin78kxQttMVRyfnjisC/3xSLcF7BngyVo20iggqMfcC4BDCGhEU2Th01I+Gk/Fs9UxL6laPfaf+CjJscCp9qJgA/TRMr+MRfPXb4QCLMTd+gMfv27fZN4YLvmhj0pWVIbqC76WJDlc0gzOdhxERWRwAtqei7WfqaEsRdcapm7t9clQQVyz2+WVlRSTxw=</ds:X509Certificate> +</ds:X509Data> +</ds:KeyInfo> +</md:KeyDescriptor> +<md:ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp/protocol/saml/resolve" index="0"/> +<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp/protocol/saml"/> +<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp/protocol/saml"/> +<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp/protocol/saml"/> +<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp/protocol/saml"/> +<md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat> +<md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat> +<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat> +<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat> +<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp/protocol/saml"/> +<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp/protocol/saml"/> +<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp/protocol/saml"/> +<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp/protocol/saml"/> +</md:IDPSSODescriptor> +</md:EntityDescriptor> \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..acd60e5393d455769e639db9f61e24cf23e11f2a --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java @@ -0,0 +1,167 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.collaboration; + +import static org.assertj.core.api.Assertions.*; +import static org.awaitility.Awaitility.*; +import static org.mockito.Mockito.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.test.annotation.DirtiesContext; + +import de.ozgcloud.apilib.user.OzgCloudUserId; +import de.ozgcloud.apilib.user.OzgCloudUserProfile; +import de.ozgcloud.apilib.user.OzgCloudUserProfileService; +import de.ozgcloud.command.Command; +import de.ozgcloud.command.CommandStatus; +import de.ozgcloud.common.test.DataITCase; +import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; +import de.ozgcloud.vorgang.callcontext.CallContext; +import de.ozgcloud.vorgang.callcontext.WithMockCustomUser; +import de.ozgcloud.vorgang.command.CommandService; +import de.ozgcloud.vorgang.command.CommandTestFactory; +import de.ozgcloud.vorgang.command.CreateCommandRequest; +import de.ozgcloud.vorgang.vorgang.Vorgang; +import de.ozgcloud.vorgang.vorgang.VorgangHead; +import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; +import de.ozgcloud.vorgang.vorgang.ZustaendigeStelleTestFactory; + +@SpringBootTest(properties = { + "grpc.server.inProcessName=test", + "grpc.client.vorgang-manager.address=in-process:test", + "grpc.client.ozgcloud-command-manager.address=in-process:test", +}) +@DataITCase +@WithMockCustomUser +@DirtiesContext +class CollaborationITCase { + + @Autowired + private CommandService commandService; + + @Autowired + private MongoOperations mongoOperations; + + @MockBean + private OzgCloudUserProfileService ozgCloudUserProfileService; + @Mock + private OzgCloudUserProfile ozgCloudUserProfile; + + @BeforeEach + void init() { + mongoOperations.dropCollection(Command.class); + mongoOperations.dropCollection(Vorgang.class); + mongoOperations.dropCollection(VorgangAttachedItem.class); + when(ozgCloudUserProfile.getId()).thenReturn(OzgCloudUserId.from(CommandTestFactory.CREATED_BY)); + when(ozgCloudUserProfileService.getById(any())).thenReturn(ozgCloudUserProfile); + } + + @Nested + class TestCreateCollaborationVorgang { + + private static final String FIELD_COLLABORATION_VORGANG_ID = "collaborationVorgangId"; + private static final String TITEL = "Collaboration Vorgang"; + private static final String ANFRAGE = "Anfrage"; + + private String vorgangId; + + @BeforeEach + void init() { + vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0L).build()).getId(); + } + + @Test + void shouldSetCollaborationVorgangId() { + var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId)); + + waitUntilCommandFinished(command.getId()); + + var collaborationRequests = loadCollaborationRequest(vorgangId); + assertThat(collaborationRequests).hasSize(1).first().extracting(VorgangAttachedItem::getItem, MAP) + .containsKey(FIELD_COLLABORATION_VORGANG_ID); + } + + @Test + void shouldCreateCollaborationVorgang() { + var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId)); + + waitUntilCommandFinished(command.getId()); + + var collaborationVorgang = loadCollaborationVorgang(vorgangId); + assertThat(collaborationVorgang.getHeader()).extracting(VorgangHead::getCollaborationLevel) + .isEqualTo(CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL); + assertThat(collaborationVorgang.getHeader()).extracting(VorgangHead::getOrganisationsEinheitId) + .isEqualTo(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); + assertThat(collaborationVorgang.getClientAttributes()).isEmpty(); + } + + private CreateCommandRequest buildCreateCollaborationVorgangCommand(String vorgangId) { + return CreateCommandRequest.builder() + .callContext(CallContext.builder().client("test").build()) + .vorgangId(vorgangId) + .relationId(vorgangId) + .order("CREATE_COLLABORATION_REQUEST") + .bodyObject(Map.of( + "titel", TITEL, + "anfrage", ANFRAGE, + "zustaendigeStelle", ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID + )) + .build(); + } + + private void waitUntilCommandFinished(String commandId) { + await().atMost(60, TimeUnit.SECONDS).until( + () -> mongoOperations.findById(commandId, Command.class), + command -> command.getStatus() == CommandStatus.FINISHED + ); + } + + private Vorgang loadCollaborationVorgang(String sourceVorgangId) { + var collaborationVorgangId = loadCollaborationRequest(sourceVorgangId).getFirst().getItem().get(FIELD_COLLABORATION_VORGANG_ID); + return mongoOperations.findById(collaborationVorgangId, Vorgang.class); + } + + private List<VorgangAttachedItem> loadCollaborationRequest(String vorgangId) { + var query = new Query(new Criteria().andOperator( + Criteria.where(VorgangAttachedItem.FIELDNAME_VORGANG_ID).is(vorgangId), + Criteria.where(VorgangAttachedItem.FIELDNAME_ITEM_NAME).is("CollaborationRequest") + )); + return mongoOperations.find(query, VorgangAttachedItem.class); + } + } + +} \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationRepositoryITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationRepositoryITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..b44c3d827a851c7e9b30c28919fb112647914d81 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationRepositoryITCase.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.collaboration; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import de.ozgcloud.common.test.DataITCase; +import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; + +@DataITCase +class CollaborationRepositoryITCase { + + @Autowired + private CollaborationRepository repository; + + @Test + void shouldSaveVorgang() { + var vorgang = VorgangTestFactory.createBuilder().id(null).build(); + + var savedVorgang = repository.save(vorgang); + + assertThat(savedVorgang.getId()).isNotNull(); + assertThat(savedVorgang).usingRecursiveComparison().ignoringFields("id").isEqualTo(vorgang); + } +} \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..01e063f2c45e20dcbd8a8fa3bbc4caa589205784 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationServiceTest.java @@ -0,0 +1,257 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.collaboration; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.time.ZonedDateTime; +import java.time.temporal.ChronoUnit; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.springframework.context.ApplicationEventPublisher; + +import de.ozgcloud.command.VorgangCreatedEvent; +import de.ozgcloud.vorgang.servicekonto.ServiceKonto; +import de.ozgcloud.vorgang.servicekonto.ServiceKontoTestFactory; +import de.ozgcloud.vorgang.vorgang.Vorgang; +import de.ozgcloud.vorgang.vorgang.VorgangHead; +import de.ozgcloud.vorgang.vorgang.VorgangHeadTestFactory; +import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; +import de.ozgcloud.vorgang.vorgang.ZustaendigeStelleTestFactory; + +class CollaborationServiceTest { + + @Spy + @InjectMocks + private CollaborationService service; + + @Mock + private CollaborationRepository collaborationRepository; + @Mock + private ApplicationEventPublisher publisher; + + @Nested + class TestCreateCollaborationVorgang { + + private static final CreateCollaborationVorgangRequest CREATE_COLLABORATION_VORGANG_REQUEST = CreateCollaborationVorgangRequestTestFactory.create(); + private static final String COLLABORATION_VORGANG_ID = "collaboration-vorgang-id"; + private static final Vorgang SAVED_VORGANG = VorgangTestFactory.createBuilder().id(COLLABORATION_VORGANG_ID).build(); + + @Mock + private Vorgang collaborationVorgang; + @Captor + private ArgumentCaptor<VorgangCreatedEvent> eventCaptor; + + @BeforeEach + void init() { + doReturn(collaborationVorgang).when(service).buildCollaborationVorgang(any()); + when(collaborationRepository.save(any())).thenReturn(SAVED_VORGANG); + } + + @Test + void shouldCallBuildCollaborationVorgang() { + createCollaborationVorgang(); + + verify(service).buildCollaborationVorgang(CREATE_COLLABORATION_VORGANG_REQUEST); + } + + @Test + void shouldCallSaveVorgang() { + createCollaborationVorgang(); + + verify(collaborationRepository).save(collaborationVorgang); + } + + @Test + void shouldPublishEvent() { + createCollaborationVorgang(); + + verifyNoInteractions(publisher); + // TODO: aktiviere, wenn VorgangCreatedEvent veröffentlicht wird + // verify(publisher).publishEvent(eventCaptor.capture()); + // assertThat(eventCaptor.getValue().getSource()).isEqualTo(COLLABORATION_VORGANG_ID); + } + + @Test + void shouldReturnVorgang() { + var result = createCollaborationVorgang(); + + assertThat(result).isSameAs(SAVED_VORGANG); + } + + private Vorgang createCollaborationVorgang() { + return service.createCollaborationVorgang(CREATE_COLLABORATION_VORGANG_REQUEST); + } + } + + @Nested + class TestBuildCollaborationVorgang { + + private static final CreateCollaborationVorgangRequest COLLABORATION_REQUEST = CreateCollaborationVorgangRequestTestFactory.createBuilder() + .vorgang(VorgangTestFactory.createBuilder().formEngineName(VorgangTestFactory.FORM_ENGINE_NAME).build()).build(); + + private static final VorgangHead UPDATED_HEAD = VorgangHeadTestFactory.create(); + + @BeforeEach + void init() { + doReturn(UPDATED_HEAD).when(service).getHeader(any()); + } + + @Test + void shouldSetVorgangName() { + var result = buildCollaborationVorgang(); + + assertThat(result.getName()).isEqualTo(VorgangTestFactory.NAME); + } + + @Test + void shouldSetVorgangNummer() { + var result = buildCollaborationVorgang(); + + assertThat(result.getNummer()).isEqualTo(VorgangTestFactory.VORGANG_NUMMER); + } + + @Test + void shouldSetFormEngineName() { + var result = buildCollaborationVorgang(); + + assertThat(result.getFormEngineName()).isEqualTo(VorgangTestFactory.FORM_ENGINE_NAME); + } + + @Test + void shouldSetAktenzeichen() { + var result = buildCollaborationVorgang(); + + assertThat(result.getAktenzeichen()).isEqualTo(VorgangTestFactory.AKTENZEICHEN); + } + + @Test + void shouldCallGetHeader() { + buildCollaborationVorgang(); + + verify(service).getHeader(COLLABORATION_REQUEST); + } + + @Test + void shouldSetHeader() { + var result = buildCollaborationVorgang(); + + assertThat(result.getHeader()).isEqualTo(UPDATED_HEAD); + } + + @Test + void shouldSetEingangs() { + var result = buildCollaborationVorgang(); + + assertThat(result.getEingangs()).containsExactly(VorgangTestFactory.EINGANG); + } + + @Test + void shouldSetCreatedAt() { + var result = buildCollaborationVorgang(); + + assertThat(result.getCreatedAt()).isCloseTo(ZonedDateTime.now(), within(1, ChronoUnit.SECONDS)); + } + + @Test + void shouldSetInCreationFalse() { + var result = buildCollaborationVorgang(); + + assertThat(result.isInCreation()).isFalse(); + } + + @Test + void shouldSetStatusNeu() { + var result = buildCollaborationVorgang(); + + assertThat(result.getStatus()).isEqualTo(Vorgang.Status.NEU); + } + + @Test + void shouldNotSetAssignedTo() { + var result = buildCollaborationVorgang(); + + assertThat(result.getAssignedTo()).isNull(); + } + + @Test + void shouldNotSetClientAttributes() { + var result = buildCollaborationVorgang(); + + assertThat(result.getClientAttributes()).isEmpty(); + } + + @Test + void shouldNotSetForwardings() { + var result = buildCollaborationVorgang(); + + assertThat(result.getForwardings()).isEmpty(); + } + + private Vorgang buildCollaborationVorgang() { + return service.buildCollaborationVorgang(COLLABORATION_REQUEST); + } + } + + @Nested + class TestGetHeader { + + private static final ServiceKonto SERVICE_KONTO = ServiceKontoTestFactory.create(); + + @Test + void shouldSetZustaendigeStelle() { + var result = getHeader(); + + assertThat(result.getOrganisationsEinheitId()).isEqualTo(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); + } + + @Test + void shouldSetCollaborationLevel() { + var result = getHeader(); + + assertThat(result.getCollaborationLevel()).isEqualTo(CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL); + } + + @Test + void shouldKeepServiceKonto() { + var result = getHeader(); + + assertThat(result.getServiceKonto()).isSameAs(SERVICE_KONTO); + } + + private VorgangHead getHeader() { + return service.getHeader(CreateCollaborationVorgangRequestTestFactory.createBuilder().vorgang(VorgangTestFactory.createBuilder().header( + VorgangHeadTestFactory.createBuilder().serviceKonto(SERVICE_KONTO).build()).build()).build()); + } + } + +} \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapperTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..45e76253f7a9e06bd7c221d1a7e4c0a56e46ae32 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapperTest.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.vorgang.collaboration; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +class CreateCollaborationVorgangRequestMapperTest { + + private final CreateCollaborationVorgangRequestMapper mapper = Mappers.getMapper(CreateCollaborationVorgangRequestMapper.class); + + @Test + void shouldMapFromGrpc() { + var result = mapper.mapFrom(GrpcCollaborationRequestTestFactory.create()); + + assertThat(result).usingRecursiveComparison().ignoringFields("vorgang").isEqualTo(CreateCollaborationVorgangRequestTestFactory.create()); + } +} \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..642dd5385a37c04998ee35664c908cd91a1866f4 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestTestFactory.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.collaboration; + +import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangRequest.CreateCollaborationVorgangRequestBuilder; +import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; +import de.ozgcloud.vorgang.vorgang.ZustaendigeStelleTestFactory; + +public class CreateCollaborationVorgangRequestTestFactory { + + public static final int COLLABORATION_LEVEL = 1; + + public static CreateCollaborationVorgangRequest create() { + return createBuilder().build(); + } + + public static CreateCollaborationVorgangRequestBuilder createBuilder() { + return CreateCollaborationVorgangRequest.builder() + .vorgang(VorgangTestFactory.create()) + .zustaendigeStelle(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID) + .collaborationLevel(COLLABORATION_LEVEL); + } + +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCollaborationRequestTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCollaborationRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..e46337e88b4364406238abb4ae3bfa0cece7ecae --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCollaborationRequestTestFactory.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.collaboration; + +import de.ozgcloud.vorgang.vorgang.GrpcCollaborationRequest; +import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; +import de.ozgcloud.vorgang.vorgang.ZustaendigeStelleTestFactory; + +public class GrpcCollaborationRequestTestFactory { + + public static GrpcCollaborationRequest create() { + return createBuilder().build(); + } + + public static GrpcCollaborationRequest.Builder createBuilder() { + return GrpcCollaborationRequest.newBuilder() + .setVorgangId(VorgangTestFactory.ID) + .setZustaendigeStelle(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID) + .setCollaborationLevel(CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL); + } +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCreateCollaborationVorgangResponseTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCreateCollaborationVorgangResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..1851256f15a55aeb97fc63b77399d1e71a41ae6d --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCreateCollaborationVorgangResponseTestFactory.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.collaboration; + +import java.util.UUID; + +import de.ozgcloud.vorgang.vorgang.GrpcCreateCollaborationVorgangResponse; + +public class GrpcCreateCollaborationVorgangResponseTestFactory { + + public static final String VORGANG_ID = UUID.randomUUID().toString(); + + public static GrpcCreateCollaborationVorgangResponse create() { + return createBuilder().build(); + } + + public static GrpcCreateCollaborationVorgangResponse.Builder createBuilder() { + return GrpcCreateCollaborationVorgangResponse.newBuilder() + .setVorgangId(VORGANG_ID); + } +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangServiceTest.java index c47eaab97f6000c602e3d3ccd7aab63fb969392a..3b78df2424dfa62ae1048907e663065de5110e27 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangServiceTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangServiceTest.java @@ -30,6 +30,7 @@ import static org.mockito.Mockito.*; import java.util.Collections; import java.util.List; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -41,6 +42,13 @@ import org.mockito.Mock; import org.mockito.Spy; import org.springframework.data.domain.Page; +import de.ozgcloud.vorgang.collaboration.CollaborationService; +import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangBadRequestException; +import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangRequest; +import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangRequestMapper; +import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangRequestTestFactory; +import de.ozgcloud.vorgang.collaboration.GrpcCollaborationRequestTestFactory; +import de.ozgcloud.vorgang.collaboration.GrpcCreateCollaborationVorgangResponseTestFactory; import io.grpc.stub.StreamObserver; class GrpcVorgangServiceTest { @@ -73,6 +81,10 @@ class GrpcVorgangServiceTest { private IncomingFileMapper incomingFileMapper; @Mock private IncomingFileGroupMapper incomingFileGroupMapper; + @Mock + private CollaborationService collaborationService; + @Mock + private CreateCollaborationVorgangRequestMapper createCollaborationVorgangRequestMapper; @Nested class TestCreate { @@ -330,4 +342,170 @@ class GrpcVorgangServiceTest { verify(responseObserver).onNext(responseCaptor.capture()); } } + + @Nested + class TestCreateCollaborationVorgangEndpoint { + + @Nested + class TestCollaborationRequest { + + private static final GrpcCollaborationRequest GRPC_COLLABORATION_REQUEST = GrpcCollaborationRequestTestFactory.create(); + private static final GrpcCreateCollaborationVorgangRequest REQUEST = GrpcCreateCollaborationVorgangRequest.newBuilder() + .setCollaborationRequest(GRPC_COLLABORATION_REQUEST).build(); + private static final GrpcCreateCollaborationVorgangResponse GRPC_COLLABORATION_RESPONSE = + GrpcCreateCollaborationVorgangResponseTestFactory.create(); + + @Mock + private StreamObserver<GrpcCreateCollaborationVorgangResponse> responseObserver; + + @Captor + private ArgumentCaptor<GrpcCreateCollaborationVorgangResponse> responseCaptor; + + @BeforeEach + void init() { + doReturn(GRPC_COLLABORATION_RESPONSE).when(service).createCollaborationVorgang(any()); + } + + @Test + void shouldCallCreateCollaborationVorgang() { + createCollaborationVorgang(); + + verify(service).createCollaborationVorgang(GRPC_COLLABORATION_REQUEST); + } + + @Test + void shouldCallOnNext() { + createCollaborationVorgang(); + + verify(responseObserver).onNext(responseCaptor.capture()); + assertThat(responseCaptor.getValue().getVorgangId()).isEqualTo(GrpcCreateCollaborationVorgangResponseTestFactory.VORGANG_ID); + } + + @Test + void shouldCallOnCompleted() { + createCollaborationVorgang(); + + verify(responseObserver).onCompleted(); + } + + private void createCollaborationVorgang() { + service.createCollaborationVorgang(REQUEST, responseObserver); + } + } + + @Nested + class TestEmptyCollaborationRequest { + + @Mock + private StreamObserver<GrpcCreateCollaborationVorgangResponse> responseObserver; + + @Test + void shouldThrowException() { + Assertions.assertThrows(CreateCollaborationVorgangBadRequestException.class, this::createCollaborationVorgang); + } + + private void createCollaborationVorgang() { + service.createCollaborationVorgang(GrpcCreateCollaborationVorgangRequest.newBuilder().build(), responseObserver); + } + } + } + + @Nested + class TestCreateCollaborationVorgang { + + private static final GrpcCollaborationRequest GRPC_COLLABORATION_REQUEST = GrpcCollaborationRequestTestFactory.create(); + private static final CreateCollaborationVorgangRequest CREATE_COLLABORATION_VORGANG_REQUEST = CreateCollaborationVorgangRequestTestFactory.create(); + private static final Vorgang COLLABORATION_VORGANG = VorgangTestFactory.create(); + + @BeforeEach + void init() { + doReturn(CREATE_COLLABORATION_VORGANG_REQUEST).when(service).buildCreateCollaborationVorgangRequest(any()); + when(collaborationService.createCollaborationVorgang(any())).thenReturn(COLLABORATION_VORGANG); + } + + @Test + void shouldCallBuildCreateCollaborationVorgangRequest() { + createCollaborationVorgang(); + + verify(service).buildCreateCollaborationVorgangRequest(GRPC_COLLABORATION_REQUEST); + } + + @Test + void shouldCallCreateCollaborationVorgang() { + createCollaborationVorgang(); + + verify(collaborationService).createCollaborationVorgang(CREATE_COLLABORATION_VORGANG_REQUEST); + } + + @Test + void shouldCallBuildResponse() { + createCollaborationVorgang(); + + verify(service).buildCreateCollaborationVorgangResponse(COLLABORATION_VORGANG); + } + + @Test + void shouldReturnResponse() { + var response = GrpcCreateCollaborationVorgangResponseTestFactory.create(); + doReturn(response).when(service).buildCreateCollaborationVorgangResponse(any()); + + var result = createCollaborationVorgang(); + + assertThat(result).isSameAs(response); + } + + private GrpcCreateCollaborationVorgangResponse createCollaborationVorgang() { + return service.createCollaborationVorgang(GRPC_COLLABORATION_REQUEST); + } + } + + @Nested + class TestBuildCreateCollaborationVorgangRequest { + + private static final GrpcCollaborationRequest GRPC_COLLABORATION_REQUEST = GrpcCollaborationRequestTestFactory.create(); + private static final CreateCollaborationVorgangRequest CREATE_COLLABORATION_VORGANG_REQUEST = CreateCollaborationVorgangRequestTestFactory.create(); + private static final Vorgang VORGANG = VorgangTestFactory.create(); + + @BeforeEach + void init() { + when(createCollaborationVorgangRequestMapper.mapFrom(any())).thenReturn(CREATE_COLLABORATION_VORGANG_REQUEST); + when(vorgangService.getById(anyString())).thenReturn(VORGANG); + } + + @Test + void shouldCallGetVorgang() { + buildCreateCollaborationVorgangRequest(); + + verify(vorgangService).getById(VorgangTestFactory.ID); + } + + @Test + void shouldCallRequestMapper() { + buildCreateCollaborationVorgangRequest(); + + verify(createCollaborationVorgangRequestMapper).mapFrom(GRPC_COLLABORATION_REQUEST); + } + + @Test + void shouldSetVorgang() { + var result = buildCreateCollaborationVorgangRequest(); + + assertThat(result.getVorgang()).isSameAs(VORGANG); + } + + private CreateCollaborationVorgangRequest buildCreateCollaborationVorgangRequest() { + return service.buildCreateCollaborationVorgangRequest(GRPC_COLLABORATION_REQUEST); + } + } + + @Nested + class TestBuildCreateCollaborationVorgangResponse { + + @Test + void shouldSetVorgangId() { + var result = service.buildCreateCollaborationVorgangResponse(VorgangTestFactory.create()); + + assertThat(result.getVorgangId()).isEqualTo(VorgangTestFactory.ID); + } + } } \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceTest.java index 216eb98e9acdd32f73761e69c40c489ffc10a07c..fb8085fe48a868c0c40ff629bf19ae4ec4dcea32 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceTest.java @@ -346,7 +346,7 @@ class VorgangServiceTest { void shouldThrowAccessDeniedException() { when(vorgangAuthorizationService.authorizeByOrganisationseinheitenId(any(), any())).thenReturn(false); - assertThrows(AccessDeniedException.class, () -> service.getById(VorgangTestFactory.ID, FilterCriteriaTestFactory.create())); // NOSONAR + assertThrows(AccessDeniedException.class, () -> service.getById(VorgangTestFactory.ID, FilterCriteriaTestFactory.create())); //NOSONAR } } @@ -381,10 +381,45 @@ class VorgangServiceTest { } } + @Nested + class TestGetOriginalVorgangById { + + private final static Vorgang VORGANG = VorgangTestFactory.create(); + + @BeforeEach + void init() { + doReturn(VORGANG).when(service).loadById(anyString()); + } + + @Test + void shouldCallLoadById() { + service.getOriginalVorgangById(VorgangTestFactory.ID); + + verify(service).loadById(VorgangTestFactory.ID); + } + + @Test + void shouldCallRemoveUnpermittedClientAttributes() { + service.getOriginalVorgangById(VorgangTestFactory.ID); + + verify(service).removeUnpermittedClientAttributes(VORGANG); + } + + @Test + void shouldReturnVorgang() { + var cleanedVorgang = VorgangTestFactory.create(); + doReturn(cleanedVorgang).when(service).removeUnpermittedClientAttributes(any()); + + var result = service.getOriginalVorgangById(VorgangTestFactory.ID); + + assertThat(result).isSameAs(cleanedVorgang); + } + } + @Nested class TestAssignToUser { - private Command command = CommandTestFactory.createBuilder().body(Map.of("assignedTo", "Klaus")).build(); + private final Command command = CommandTestFactory.createBuilder().body(Map.of("assignedTo", "Klaus")).build(); @Test void shouldCallRepository() { @@ -418,8 +453,8 @@ class VorgangServiceTest { @Nested class TestDeleteVorgang { - private Vorgang vorgang = VorgangTestFactory.create(); - private VorgangStub stub = VorgangStubTestFactory.create(); + private final Vorgang vorgang = VorgangTestFactory.create(); + private final VorgangStub stub = VorgangStubTestFactory.create(); @BeforeEach void init() { diff --git a/vorgang-manager-utils/pom.xml b/vorgang-manager-utils/pom.xml index 8e78361b0e1cae1ecef07ee4a41cf1e1ed1b0315..c65c6998164b07007eff874d6ec6bd307c31733f 100644 --- a/vorgang-manager-utils/pom.xml +++ b/vorgang-manager-utils/pom.xml @@ -30,14 +30,14 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-dependencies</artifactId> - <version>4.3.0</version> + <version>4.3.1</version> <relativePath/> </parent> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-utils</artifactId> <name>OZG-Cloud Vorgang Manager Utils</name> - <version>2.11.0-SNAPSHOT</version> + <version>2.12.0-SNAPSHOT</version> <properties> <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>