diff --git a/Jenkinsfile b/Jenkinsfile index 9364c4109f338181ff3cbda19f14e64a091fac51..edbce0d65de5036be152cff85206da9e6efc20f2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -27,42 +27,25 @@ pipeline { def rootVersion = getPomVersion('pom.xml') def serverVersion = getPomVersion('vorgang-manager-server/pom.xml') def interfaceVersion = getPomVersion('vorgang-manager-interface/pom.xml') - def mailVersion = getPomVersion('nachrichten-manager/pom.xml') if(isReleaseBranch()){ - if ( !(rootVersion ==~ RELEASE_REGEX) || !(serverVersion ==~ RELEASE_REGEX) || !(interfaceVersion ==~ RELEASE_REGEX) || !(mailVersion ==~ RELEASE_REGEX)) { + if ( !(rootVersion ==~ RELEASE_REGEX) || !(serverVersion ==~ RELEASE_REGEX) || !(interfaceVersion ==~ RELEASE_REGEX) ) { error("Keine Release Version für Branch ${env.BRANCH_NAME}.") } } else { - if ( !(rootVersion ==~ SNAPSHOT_REGEX) || !(serverVersion ==~ SNAPSHOT_REGEX) || !(interfaceVersion ==~ SNAPSHOT_REGEX) || !(mailVersion ==~ SNAPSHOT_REGEX)) { + if ( !(rootVersion ==~ SNAPSHOT_REGEX) || !(serverVersion ==~ SNAPSHOT_REGEX) || !(interfaceVersion ==~ SNAPSHOT_REGEX) ) { error("Keine Snapshot Version für Branch ${env.BRANCH_NAME}.") } } - if( !(rootVersion == serverVersion && rootVersion == interfaceVersion && rootVersion == mailVersion)){ + if( !(rootVersion == serverVersion && rootVersion == interfaceVersion )){ error("Versionen sind nicht identisch") } - - def bayernIdProxyParent = getPomVersion('nachrichten-bayernid-proxy/pom.xml') - def bayernIdProxyInterface = getPomVersion('nachrichten-bayernid-proxy/bayernid-proxy-interface/pom.xml') - - if(isReleaseBranch()){ - if ( !(bayernIdProxyParent ==~ RELEASE_REGEX) || !(bayernIdProxyInterface ==~ RELEASE_REGEX)) { - error("Keine Release Version für BayernIdProxy Branch ${env.BRANCH_NAME}.") - } - } else { - if ( !(bayernIdProxyParent ==~ SNAPSHOT_REGEX) || !(bayernIdProxyInterface ==~ SNAPSHOT_REGEX)) { - error("Keine Snapshot Version für BayernIdProxy Branch ${env.BRANCH_NAME}.") - } - } - if( !(bayernIdProxyParent == bayernIdProxyInterface)){ - error("Versionen BayernIdProxy sind nicht identisch") - } } } } - stage('Build VorgangManager / NachrichtenManagner') { + stage('Build VorgangManager') { steps { script { FAILED_STAGE=env.STAGE_NAME @@ -105,20 +88,6 @@ pipeline { } } - stage('Build Docker image nachrichten-bayernid-proxy') { - steps { - script { - FAILED_STAGE=env.STAGE_NAME - } - - configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { - dir('nachrichten-bayernid-proxy/bayernid-proxy-impl') { - sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS spring-boot:build-image -DskipTests -Dmaven.wagon.http.retryHandler.count=3' - } - } - } - } - stage('Tag and Push Docker image vorgang-manager') { steps { script { @@ -138,25 +107,6 @@ pipeline { } } - stage('Tag and Push Docker image nachrichten-bayernid-proxy') { - steps { - script { - FAILED_STAGE=env.STAGE_NAME - IMAGE_TAG_BAYERN_ID_PROXY = generateImageTag('nachrichten-bayernid-proxy/pom.xml') - - tagAndPushDockerImage('bayernid-proxy', IMAGE_TAG_BAYERN_ID_PROXY) - - if (env.BRANCH_NAME == 'master') { - tagAndPushDockerImage('bayernid-proxy', 'snapshot-latest') - tagAndPushDockerImage('bayernid-proxy', 'e2e-test') - } - else if (env.BRANCH_NAME == 'release') { - tagAndPushDockerImage('bayernid-proxy', 'latest') - } - } - } - } - stage('Test, build and deploy Helm Chart vorgang-manager') { steps { script { @@ -175,26 +125,6 @@ pipeline { } } - stage('Test, build and deploy Helm Chart bayernid-proxy') { - steps { - script { - FAILED_STAGE=env.STAGE_NAME - HELM_CHART_VERSION_BAYERN_ID_PROXY = generateHelmChartVersion("nachrichten-bayernid-proxy/pom.xml") - - dir('nachrichten-bayernid-proxy') { - sh "./run_helm_test.sh" - } - - dir('nachrichten-bayernid-proxy/src/main/helm') { - - sh "helm package --version=${HELM_CHART_VERSION_BAYERN_ID_PROXY} ." - - deployHelmChart("bayernid-proxy", HELM_CHART_VERSION_BAYERN_ID_PROXY) - } - } - } - } - stage('Trigger Dev rollout') { when { branch 'master' @@ -206,7 +136,6 @@ pipeline { cloneGitopsRepo() setNewVorgangManagerGitopsVersion("dev") - setNewNachrichtenBayernIdProxyGitopsVersion("dev") pushDevGitopsRepo() } } @@ -223,7 +152,6 @@ pipeline { cloneGitopsRepo() setNewVorgangManagerGitopsVersion("test") - setNewNachrichtenBayernIdProxyGitopsVersion("test") pushTestGitopsRepo() } @@ -275,36 +203,6 @@ pipeline { unstable("SonarQube failed") } } - - dir('nachrichten-manager') { - try { - withSonarQubeEnv('sonarqube-ozg-sh'){ - sh 'mvn -s $MAVEN_SETTINGS sonar:sonar' - } - } catch (Exception e) { - unstable("SonarQube failed") - } - } - - dir('notification-manager') { - try { - withSonarQubeEnv('sonarqube-ozg-sh'){ - sh 'mvn -s $MAVEN_SETTINGS sonar:sonar' - } - } catch (Exception e) { - unstable("SonarQube failed") - } - } - - dir('nachrichten-bayernid-proxy') { - try { - withSonarQubeEnv('sonarqube-ozg-sh'){ - sh 'mvn -s $MAVEN_SETTINGS sonar:sonar' - } - } catch (Exception e) { - unstable("SonarQube BayernIdProxy failed") - } - } } } } @@ -414,18 +312,6 @@ Void setNewVorgangManagerGitopsVersion(String environment) { } } -Void setNewNachrichtenBayernIdProxyGitopsVersion(String environment) { - dir("gitops") { - def envFile = "${environment}/application/values/bayernid-proxy-values.yaml" - def envVersions = readYaml file: envFile - - envVersions.bayernid_proxy.image.tag = IMAGE_TAG_BAYERN_ID_PROXY - envVersions.bayernid_proxy.helm.version = HELM_CHART_VERSION_BAYERN_ID_PROXY - - writeYaml file: envFile, data: envVersions, overwrite: true - } -} - Void pushDevGitopsRepo() { pushNewGitopsVersion('dev') } @@ -443,7 +329,7 @@ Void pushNewGitopsVersion(String environment) { withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { sh "git add ${environment}/application/values/*-values.yaml" - sh "git commit -m 'jenkins rollout ${environment} vorgang-manager version ${IMAGE_TAG} bayern-id version ${IMAGE_TAG_BAYERN_ID_PROXY}'" + sh "git commit -m 'jenkins rollout ${environment} vorgang-manager version ${IMAGE_TAG}'" sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git' } } diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index 07ca67426a2042ed3f702a4c3ef65e621c984e13..0b9174c6394ee1d61ac7380a2ad9b1e3c7c3b4a4 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -5,18 +5,19 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.0.1-SNAPSHOT</version> + <version>4.1.0-SNAPSHOT</version> <relativePath /> </parent> <groupId>de.ozgcloud.bescheid</groupId> <artifactId>bescheid-manager</artifactId> <name>OZG-Cloud Bescheid Manager</name> - <version>1.10.0-SNAPSHOT</version> + <version>1.11.0-SNAPSHOT</version> <properties> - <vorgang-manager.version>2.6.0-SNAPSHOT</vorgang-manager.version> - <api-lib.version>0.7.0-SNAPSHOT</api-lib.version> + <vorgang-manager.version>2.7.0-SNAPSHOT</vorgang-manager.version> + <nachrichten-manager.version>2.7.0-SNAPSHOT</nachrichten-manager.version> + <api-lib.version>0.8.0-SNAPSHOT</api-lib.version> </properties> <dependencies> @@ -26,6 +27,11 @@ <artifactId>vorgang-manager-interface</artifactId> <version>${vorgang-manager.version}</version> </dependency> + <dependency> + <groupId>de.ozgcloud.nachrichten</groupId> + <artifactId>nachrichten-manager-interface</artifactId> + <version>${nachrichten-manager.version}</version> + </dependency> <dependency> <groupId>de.ozgcloud.command</groupId> <artifactId>command-manager</artifactId> diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java index c08d2a90c97761f8da7e20ee63bdbeec6fe20569..c26f275ff4adbdc446e5e4957928897b4e043aa2 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java @@ -3,14 +3,11 @@ package de.ozgcloud.bescheid; import java.io.File; import java.util.Optional; -import org.apache.commons.lang3.StringUtils; - import de.ozgcloud.bescheid.vorgang.Vorgang; import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.common.binaryfile.FileId; import lombok.Builder; import lombok.Getter; -import lombok.RequiredArgsConstructor; import lombok.With; @Builder(toBuilder = true) @@ -46,29 +43,26 @@ public class Bescheid { private Vorgang.ServiceKonto serviceKonto; public enum Status { - DRAFT, BESCHEID, SEND; + DRAFT, SENT; - public boolean not(String value) { + public boolean not(Object value) { return !hasValue(value); } - public boolean hasValue(String value) { - return this.name().equalsIgnoreCase(value); + public boolean hasValue(Object value) { + return this.name().equalsIgnoreCase(String.valueOf(value)); } } - @RequiredArgsConstructor public enum SendBy { - NACHRICHT("NACHRICHT"), MANUAL("MANUAL"); - - private final String value; + NACHRICHT, MANUAL; public boolean notValue(Object sendByValue) { return !hasValue(sendByValue); } public boolean hasValue(Object sendByValue) { - return StringUtils.equalsIgnoreCase(value, String.valueOf(sendByValue)); + return this.name().equalsIgnoreCase(String.valueOf(sendByValue)); } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java index 5a16db15e398136d8f61e4091532f8a0d0b717b3..7da2c36ae9157cfeec547ac98f8ec6cd9f576f6d 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java @@ -24,9 +24,11 @@ package de.ozgcloud.bescheid; import java.time.LocalDate; +import java.util.Arrays; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Predicate; +import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.springframework.context.ApplicationEventPublisher; @@ -34,6 +36,7 @@ import org.springframework.context.event.EventListener; import org.springframework.security.core.context.SecurityContext; import org.springframework.stereotype.Component; +import de.ozgcloud.bescheid.Bescheid.SendBy; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.binaryfile.BinaryFileService; import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; @@ -43,6 +46,7 @@ import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandCreatedEvent; import de.ozgcloud.command.CommandFailedEvent; +import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.document.BescheidDocumentCreatedEvent; import de.ozgcloud.document.DocumentService; import lombok.NonNull; @@ -59,7 +63,6 @@ class BescheidEventListener { public static final String UPDATE_BESCHEID_ORDER = "UPDATE_BESCHEID"; public static final String CREATE_BESCHEID_DOCUMENT_ORDER = "CREATE_BESCHEID_DOCUMENT"; public static final String SEND_BESCHEID_ORDER = "SEND_BESCHEID"; - public static final String SEND_POSTFACH_MAIL_ORDER = "SEND_POSTFACH_MAIL"; public static final Predicate<Command> IS_CREATE_BESCHEID_COMMAND = command -> CREATE_BESCHEID_ORDER.equals(command.getOrder()); private static final String IS_CREATE_BESCHEID = "{T(de.ozgcloud.bescheid.BescheidEventListener).IS_CREATE_BESCHEID_COMMAND.test(event.getSource())}"; @@ -76,9 +79,6 @@ class BescheidEventListener { public static final Predicate<Command> IS_SEND_BESCHEID_COMMAND = command -> SEND_BESCHEID_ORDER.equals(command.getOrder()); private static final String IS_SEND_BESCHEID = "{T(de.ozgcloud.bescheid.BescheidEventListener).IS_SEND_BESCHEID_COMMAND.test(event.getSource())}"; - public static final Predicate<Command> IS_SEND_POSTFACH_MAIL_COMMAND = command -> SEND_POSTFACH_MAIL_ORDER.equals(command.getOrder()); - private static final String IS_SEND_POSTFACH_MAIL = "{T(de.ozgcloud.bescheid.BescheidEventListener).IS_SEND_POSTFACH_MAIL_COMMAND.test(event.getSource())}"; - private static final String TEMPLATE_GROUP_KIEL = "Kiel"; static final String VORGANG_ID_BODYKEY = "vorgangId"; static final String BESCHEID_VOM_BODYKEY = "bescheidVom"; @@ -160,17 +160,16 @@ class BescheidEventListener { } void doSendBescheid(Command command) { - service.sendBescheidManually(command.getRelationId(), command.getRelationVersion()); - eventPublisher.publishEvent(new BescheidSentEvent(command)); - } - - @EventListener(condition = IS_SEND_POSTFACH_MAIL) - public void onSendPostfachMailCommand(CommandCreatedEvent event) { - runWithSecurityContext(event.getSource(), this::doSendPostfachMail); - } - - void doSendPostfachMail(Command command) { - service.sendBescheidPostfachMail(command.getRelationId(), command.getRelationVersion()); + var bescheidItem = attachedItemService.getItem(command.getRelationId()); + if (SendBy.MANUAL.hasValue(bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY))) { + service.sendBescheidManually(bescheidItem, command.getRelationVersion()); + } else if (SendBy.NACHRICHT.hasValue(bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY))) { + service.sendBescheidPostfachMail(bescheidItem, command.getRelationVersion()); + } else { + throw new TechnicalException("Bescheid has unexpected sendBy value: '%s'. Allowed values are %s." + .formatted(bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY), + Arrays.stream(SendBy.values()).map(SendBy::name).collect(Collectors.joining(",")))); + } eventPublisher.publishEvent(new BescheidSentEvent(command)); } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java index 84d0d11a5d44d852abf7d4e2ea7c027a8cc946be..d7d033e480e6259f3a08eeda83fa4e7548d23b66 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java @@ -1,9 +1,13 @@ package de.ozgcloud.bescheid; +import java.util.Collection; +import java.util.List; + import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceImplBase; +import de.ozgcloud.bescheid.attacheditem.AttachedItem; +import de.ozgcloud.bescheid.attacheditem.AttachedItemMapper; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; -import de.ozgcloud.bescheid.attacheditem.BescheidItem; -import de.ozgcloud.bescheid.attacheditem.BescheidItemMapper; +import de.ozgcloud.bescheid.vorgang.VorgangId; import io.grpc.stub.StreamObserver; import lombok.RequiredArgsConstructor; import net.devh.boot.grpc.server.service.GrpcService; @@ -13,12 +17,14 @@ import net.devh.boot.grpc.server.service.GrpcService; class BescheidGrpcService extends BescheidServiceImplBase { private final AttachedItemService attachedItemService; - private final BescheidItemMapper bescheidMapper; + private final AttachedItemMapper attachedItemMapper; + private final BescheidService bescheidService; + private final GrpcBescheidMapper grpcBescheidMapper; @Override public void getBescheidDraft(GrpcGetBescheidDraftRequest request, StreamObserver<GrpcGetBescheidDraftResponse> responseObserver) { var response = attachedItemService.findBescheidItem(request.getVorgangId()) - .map(this::buildResponse) + .map(this::buildGetBescheidDraftResponse) .orElseGet(GrpcGetBescheidDraftResponse::getDefaultInstance); responseObserver.onNext(response); @@ -26,9 +32,29 @@ class BescheidGrpcService extends BescheidServiceImplBase { } - GrpcGetBescheidDraftResponse buildResponse(BescheidItem bescheidItem) { + GrpcGetBescheidDraftResponse buildGetBescheidDraftResponse(AttachedItem bescheidItem) { return GrpcGetBescheidDraftResponse.newBuilder() - .setBescheid(bescheidMapper.toBescheid(bescheidItem)) + .setBescheid(attachedItemMapper.toBescheid(bescheidItem)) .build(); } + + @Override + public void getConfig(GrpcBescheidManagerConfigRequest request, StreamObserver<GrpcBescheidManagerConfigResponse> responseObserver) { + responseObserver.onNext(grpcBescheidMapper.fromBescheidManagerConfig(bescheidService.getConfig())); + responseObserver.onCompleted(); + } + + @Override + public void getAll(GrpcGetAllBescheidRequest request, StreamObserver<GrpcGetAllBescheidResponse> responseObserver) { + responseObserver.onNext(buildGetAllBescheidResponse(attachedItemService.findAllBescheid(VorgangId.from(request.getVorgangId())))); + responseObserver.onCompleted(); + } + + GrpcGetAllBescheidResponse buildGetAllBescheidResponse(Collection<AttachedItem> bescheidItems) { + return GrpcGetAllBescheidResponse.newBuilder().addAllBescheid(mapBescheid(bescheidItems)).build(); + } + + List<GrpcBescheid> mapBescheid(Collection<AttachedItem> bescheidItems) { + return bescheidItems.stream().map(attachedItemMapper::toBescheid).toList(); + } } diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdResponse.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfig.java similarity index 81% rename from nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdResponse.java rename to bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfig.java index f7b17f2da4ae66fbc4078d1e9be11b124164293b..7fbeae993b492c3a8f0d891641640faac9958065 100644 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdResponse.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfig.java @@ -21,17 +21,23 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.nachrichten.postfach.bayernid.proxy.message; +package de.ozgcloud.bescheid; import lombok.Builder; import lombok.Getter; @Builder @Getter -public class BayernIdResponse { +public class BescheidManagerConfig { - private boolean success; - private String status; - private String message; + private String version; + private String javaVersion; + private Features features; + @Builder + @Getter + static class Features { + + private boolean canCreateBescheidDocument; + } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java index 8eb392fbf673fc706751da2b68f3ef27df5fdefb..e30bf629a1fe8c1f09e9046b562eb16c6291849d 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java @@ -1,12 +1,12 @@ package de.ozgcloud.bescheid; -import java.util.Map; import java.util.Optional; import jakarta.annotation.PostConstruct; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.boot.info.BuildProperties; import org.springframework.stereotype.Service; import de.ozgcloud.bescheid.attacheditem.AttachedItem; @@ -34,6 +34,7 @@ class BescheidService { private final NachrichtService nachrichtService; private final CurrentUserService currentUserService; private final ClientAttributeService bescheidClientAttributeService; + private final BuildProperties buildProperties; private final Optional<BescheidRemoteService> remoteService; @PostConstruct @@ -51,9 +52,13 @@ class BescheidService { private Bescheid doCreateBescheid(BescheidRequest request) { var vorgang = vorgangService.getById(request.getVorgangId()); - return remoteService.get().create(request, vorgang) - .toBuilder().vorgangId(vorgang.getId()).serviceKonto(vorgang.getServiceKonto()) - .build(); + return remoteService.map(service -> service.create(request, vorgang)) + .map(bescheid -> updateBescheid(bescheid, vorgang)) + .orElseThrow(() -> new TechnicalException(ERROR_MESSAGE_NO_SERVICE)); + } + + private Bescheid updateBescheid(Bescheid bescheid, Vorgang vorgang) { + return bescheid.toBuilder().vorgangId(vorgang.getId()).serviceKonto(vorgang.getServiceKonto()).build(); } private void checkRemoteService() { @@ -63,8 +68,7 @@ class BescheidService { } } - public void sendBescheidManually(String id, long version) { - var bescheidItem = attachedItemService.getItem(id); + public void sendBescheidManually(AttachedItem bescheidItem, long version) { validateBescheidSendManually(bescheidItem, version); sendBescheid(bescheidItem); } @@ -73,15 +77,14 @@ class BescheidService { validateBescheid(bescheidItem, version); var sendBy = bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY); if (Bescheid.SendBy.MANUAL.notValue(sendBy)) { - throw new TechnicalException("Bescheid has unexpected sendBy value: '%s'. Expected is %s" .formatted(sendBy, Bescheid.SendBy.MANUAL)); + throw new TechnicalException("Bescheid has unexpected sendBy value: '%s'. Expected is %s".formatted(sendBy, Bescheid.SendBy.MANUAL)); } } - public void sendBescheidPostfachMail(String id, long version) { - var bescheidItem = attachedItemService.getItem(id); + public void sendBescheidPostfachMail(AttachedItem bescheidItem, long version) { validateBescheidSendPostfach(bescheidItem, version); var vorgang = vorgangService.getById(VorgangId.from(bescheidItem.getVorgangId())); - nachrichtService.createNachrichtDraft(buildBescheid(bescheidItem, vorgang.getServiceKonto())); + nachrichtService.sendNachricht(buildBescheid(bescheidItem, vorgang.getServiceKonto())); sendBescheid(bescheidItem); } @@ -101,11 +104,11 @@ class BescheidService { void validateBescheid(AttachedItem bescheidItem, long version) { if (bescheidItem.getVersion() != version) { - throw new TechnicalException("Bescheid has different version. Expected: %d, but was: %d" .formatted(version, bescheidItem.getVersion())); + throw new TechnicalException("Bescheid has different version. Expected: %d, but was: %d".formatted(version, bescheidItem.getVersion())); } var status = MapUtils.getString(bescheidItem.getItem(), Bescheid.FIELD_STATUS); if (Bescheid.Status.DRAFT.not(status)) { - throw new TechnicalException("Bescheid has status '%s'. Bescheid must have status DRAFT" .formatted(status)); + throw new TechnicalException("Bescheid has status '%s'. Bescheid must have status DRAFT".formatted(status)); } if (StringUtils.isBlank(MapUtils.getString(bescheidItem.getItem(), Bescheid.FIELD_BESCHEID_DOCUMENT))) { throw new TechnicalException("Bescheid has no document"); @@ -133,12 +136,11 @@ class BescheidService { } void sendBescheid(AttachedItem bescheidItem) { - attachedItemService.patch(setBescheidSendStatus(bescheidItem)); + attachedItemService.setBescheidStatus(bescheidItem.getId(), bescheidItem.getVersion(), Bescheid.Status.SENT); try { vorgangService.bescheiden(bescheidItem.getVorgangId()); } catch (Exception e) { - var item = attachedItemService.getItem(bescheidItem.getId()); - attachedItemService.patch(setBescheidDraftStatus(item)); + attachedItemService.setBescheidStatus(bescheidItem.getId(), bescheidItem.getVersion(), Bescheid.Status.DRAFT); throw e; } bescheidClientAttributeService.setAntragResult(bescheidItem.getVorgangId(), getBewilligt(bescheidItem)); @@ -148,11 +150,21 @@ class BescheidService { return MapUtils.getBooleanValue(bescheidItem.getItem(), Bescheid.FIELD_BEWILLIGT, false); } - AttachedItem setBescheidSendStatus(AttachedItem bescheidItem) { - return bescheidItem.toBuilder().item(Map.of(Bescheid.FIELD_STATUS, Bescheid.Status.SEND.name())).build(); + public BescheidManagerConfig getConfig() { + return BescheidManagerConfig.builder() + .version(buildProperties.getVersion()) + .javaVersion(getJavaVersion()) + .features(buildFeatures()) + .build(); } - AttachedItem setBescheidDraftStatus(AttachedItem bescheidItem) { - return bescheidItem.toBuilder().item(Map.of(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name())).build(); + String getJavaVersion() { + return System.getProperty("java.version"); + } + + BescheidManagerConfig.Features buildFeatures() { + return BescheidManagerConfig.Features.builder() + .canCreateBescheidDocument(remoteService.isPresent()) + .build(); } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/GrpcBescheidMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/GrpcBescheidMapper.java index 371bf37a8d7262e6e46857b6b4b6853a7a033194..7a8ee52f6ed2cee71cf8bffd38763b7fa9e58b48 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/GrpcBescheidMapper.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/GrpcBescheidMapper.java @@ -33,4 +33,14 @@ public interface GrpcBescheidMapper { default String fromOptional(Optional<String> optionalString) { return optionalString.orElse(StringUtils.EMPTY); } + + @Mapping(target = "versionBytes", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "mergeFeatures", ignore = true) + @Mapping(target = "javaVersionBytes", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "clearField", ignore = true) + GrpcBescheidManagerConfigResponse fromBescheidManagerConfig(BescheidManagerConfig bescheidManagerConfig); } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapper.java index c2b373a33138cc4df45ea98c5f516921713f4863..9de9fedfcdb9c670b2451026e5fa21ee691a52fb 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapper.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapper.java @@ -23,14 +23,60 @@ */ package de.ozgcloud.bescheid.attacheditem; +import static java.util.Objects.*; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.mapstruct.Mapper; +import de.ozgcloud.bescheid.Bescheid; +import de.ozgcloud.bescheid.GrpcBescheid; import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; -@Mapper(uses = { GrpcObjectMapper.class}) -interface AttachedItemMapper { +@Mapper(uses = { GrpcObjectMapper.class }) +public interface AttachedItemMapper { AttachedItem mapFromVorgangAttachedItem(GrpcVorgangAttachedItem item); + default GrpcBescheid toBescheid(AttachedItem bescheidItem) { + var bescheidBuilder = GrpcBescheid.newBuilder().setVersion(bescheidItem.getVersion()); + Optional.ofNullable(bescheidItem.getId()).ifPresent(bescheidBuilder::setId); + var bescheidData = bescheidItem.getItem(); + Optional.ofNullable(MapUtils.getString(bescheidData, Bescheid.FIELD_BESCHIEDEN_AM)).map(StringUtils::trimToNull) + .ifPresent(bescheidBuilder::setBeschiedenAm); + Optional.ofNullable(MapUtils.getBoolean(bescheidData, Bescheid.FIELD_BEWILLIGT)).ifPresent(bescheidBuilder::setBewilligt); + Optional.ofNullable(MapUtils.getString(bescheidData, Bescheid.FIELD_BESCHEID_DOCUMENT)).map(StringUtils::trimToNull) + .ifPresent(bescheidBuilder::setBescheidDocument); + Optional.ofNullable(MapUtils.getString(bescheidData, Bescheid.FIELD_SEND_BY)).map(StringUtils::trimToNull) + .ifPresent(bescheidBuilder::setSendBy); + Optional.ofNullable(MapUtils.getString(bescheidData, Bescheid.FIELD_NACHRICHT_TEXT)).map(StringUtils::trimToNull) + .ifPresent(bescheidBuilder::setNachrichtText); + Optional.ofNullable(MapUtils.getString(bescheidData, Bescheid.FIELD_NACHRICHT_SUBJECT)).map(StringUtils::trimToNull) + .ifPresent(bescheidBuilder::setNachrichtSubject); + Optional.ofNullable(MapUtils.getString(bescheidData, Bescheid.FIELD_STATUS)).map(StringUtils::trimToNull) + .ifPresent(bescheidBuilder::setStatus); + Optional.ofNullable(bescheidData.get(Bescheid.FIELD_ATTACHMENTS)).map(this::toAttachments).ifPresent(bescheidBuilder::addAllAttachments); + return bescheidBuilder.build(); + } + + @SuppressWarnings("unchecked") + default Collection<String> toAttachments(Object attachmentsObject) { + if (attachmentsObject instanceof Collection<?> attachments) { + return (Collection<String>) attachments; + } + if (attachmentsObject instanceof String attachment) { + attachment = StringUtils.trimToNull(attachment); + if (nonNull(attachment)) { + return List.of(attachment); + } + } else if (nonNull(attachmentsObject)) { + return List.of(String.valueOf(attachmentsObject)); + } + return null; //NOSONAR + } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java index 0b2b6340757011822e3bb0778d23a66d22851f8b..7a3e82b746121e49326e8d24d2484f41693c912a 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java @@ -25,18 +25,24 @@ package de.ozgcloud.bescheid.attacheditem; import static java.util.Objects.*; +import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.function.Predicate; +import java.util.stream.Collectors; import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.ArrayUtils; import org.springframework.stereotype.Service; import de.ozgcloud.apilib.common.command.OzgCloudCommand; import de.ozgcloud.apilib.common.command.OzgCloudCommandService; import de.ozgcloud.apilib.common.command.grpc.CommandMapper; +import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; +import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.command.Command; import de.ozgcloud.common.errorhandling.TechnicalException; import lombok.RequiredArgsConstructor; @@ -53,17 +59,17 @@ public class AttachedItemService { static final String DELETE_ATTACHED_ITEM = "DELETE_ATTACHED_ITEM"; static final String PATCH_ATTACHED_ITEM = "PATCH_ATTACHED_ITEM"; - private static final Predicate<String> notExpectedSendByValue = sendBy -> !BescheidItem.ACCEPTED_SEND_BY_VALUES.contains(sendBy); + private static final Predicate<String> notExpectedSendByValue = sendBy -> !ArrayUtils.contains(Bescheid.SendBy.values(), sendBy); private final OzgCloudCommandService commandService; private final VorgangAttachedItemRemoteService remoteService; private final CommandMapper commandMapper; - public Optional<BescheidItem> findBescheidItem(String vorgangId) { + public Optional<AttachedItem> findBescheidItem(String vorgangId) { return remoteService.findBescheidDraft(vorgangId); } - public BescheidItem getBescheidItem(String id) { + public AttachedItem getBescheidItem(String id) { return remoteService.getBescheid(id); } @@ -73,7 +79,7 @@ public class AttachedItemService { .map(bescheid -> overrideAttachedItem(bescheid, command)).orElseGet(() -> createAttachedItem(command)); } - String overrideAttachedItem(BescheidItem bescheidItem, Command command) { + String overrideAttachedItem(AttachedItem bescheidItem, Command command) { var bodyObject = buildAttachedItemAsMap(command, buildItemMapWithAllBescheidFields(command)); var finishedOzgCloudCommand = commandService.createAndWaitUntilDone(buildUpdateAttachedItemCommand(bescheidItem, bodyObject)); return finishedOzgCloudCommand.getCreatedResource(); @@ -81,13 +87,13 @@ public class AttachedItemService { Map<String, Object> buildItemMapWithAllBescheidFields(Command command) { var result = new HashMap<String, Object>(); - result.put(BescheidItem.FIELD_BESCHIEDEN_AM, command.getBodyObject().get(BescheidItem.FIELD_BESCHIEDEN_AM)); - result.put(BescheidItem.FIELD_BEWILLIGT, command.getBodyObject().get(BescheidItem.FIELD_BEWILLIGT)); - result.put(BescheidItem.FIELD_BESCHEID_DOCUMENT, command.getBodyObject().get(BescheidItem.FIELD_BESCHEID_DOCUMENT)); - result.put(BescheidItem.FIELD_SEND_BY, command.getBodyObject().get(BescheidItem.FIELD_SEND_BY)); - result.put(BescheidItem.FIELD_NACHRICHT_TEXT, command.getBodyObject().get(BescheidItem.FIELD_NACHRICHT_TEXT)); - result.put(BescheidItem.FIELD_NACHRICHT_SUBJECT, command.getBodyObject().get(BescheidItem.FIELD_NACHRICHT_SUBJECT)); - result.put(BescheidItem.FIELD_ATTACHMENTS, command.getBodyObject().get(BescheidItem.FIELD_ATTACHMENTS)); + result.put(Bescheid.FIELD_BESCHIEDEN_AM, command.getBodyObject().get(Bescheid.FIELD_BESCHIEDEN_AM)); + result.put(Bescheid.FIELD_BEWILLIGT, command.getBodyObject().get(Bescheid.FIELD_BEWILLIGT)); + result.put(Bescheid.FIELD_BESCHEID_DOCUMENT, command.getBodyObject().get(Bescheid.FIELD_BESCHEID_DOCUMENT)); + result.put(Bescheid.FIELD_SEND_BY, command.getBodyObject().get(Bescheid.FIELD_SEND_BY)); + result.put(Bescheid.FIELD_NACHRICHT_TEXT, command.getBodyObject().get(Bescheid.FIELD_NACHRICHT_TEXT)); + result.put(Bescheid.FIELD_NACHRICHT_SUBJECT, command.getBodyObject().get(Bescheid.FIELD_NACHRICHT_SUBJECT)); + result.put(Bescheid.FIELD_ATTACHMENTS, command.getBodyObject().get(Bescheid.FIELD_ATTACHMENTS)); return result; } @@ -99,7 +105,7 @@ public class AttachedItemService { commandService.createAndWaitUntilDone(buildUpdateAttachedItemCommand(bescheidItem, bodyObject)); } - OzgCloudCommand buildUpdateAttachedItemCommand(BescheidItem bescheidItem, Map<String, Object> bodyObject) { + OzgCloudCommand buildUpdateAttachedItemCommand(AttachedItem bescheidItem, Map<String, Object> bodyObject) { return OzgCloudCommand.builder() .vorgangId(commandMapper.toOzgCloudVorgangId(bescheidItem.getVorgangId())) .relationId(commandMapper.mapRelationId(bescheidItem.getId())) @@ -124,23 +130,23 @@ public class AttachedItemService { Map<String, Object> buildAttachedItemAsMap(Command command, Map<String, Object> itemmap) { var result = new HashMap<String, Object>(); - result.put(BescheidItem.PROPERTY_VORGANG_ID, command.getVorgangId()); - result.put(BescheidItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); - result.put(BescheidItem.PROPERTY_ITEM_NAME, BESCHEID_ITEM_NAME); - result.put(BescheidItem.PROPERTY_ITEM, itemmap); + result.put(AttachedItem.PROPERTY_VORGANG_ID, command.getVorgangId()); + result.put(AttachedItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); + result.put(AttachedItem.PROPERTY_ITEM_NAME, BESCHEID_ITEM_NAME); + result.put(AttachedItem.PROPERTY_ITEM, itemmap); return result; } Map<String, Object> buildItemMapWithExistingBescheidFields(Command command) { var result = new HashMap<String, Object>(); - result.put(BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT.name()); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_BESCHIEDEN_AM, result); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_BEWILLIGT, result); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_BESCHEID_DOCUMENT, result); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_SEND_BY, result); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_NACHRICHT_TEXT, result); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_NACHRICHT_SUBJECT, result); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_ATTACHMENTS, result); + result.put(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name()); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_BESCHIEDEN_AM, result); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_BEWILLIGT, result); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_BESCHEID_DOCUMENT, result); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_SEND_BY, result); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_NACHRICHT_TEXT, result); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_NACHRICHT_SUBJECT, result); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_ATTACHMENTS, result); return result; } @@ -151,16 +157,16 @@ public class AttachedItemService { } void validateBescheidData(Map<String, Object> bodyObject) { - if (isNull(bodyObject.get(BescheidItem.FIELD_BESCHIEDEN_AM))) { - throw new TechnicalException("Fields '%s' is required for bescheid creation" .formatted(BescheidItem.FIELD_BESCHIEDEN_AM)); + if (isNull(bodyObject.get(Bescheid.FIELD_BESCHIEDEN_AM))) { + throw new TechnicalException("Fields '%s' is required for bescheid creation".formatted(Bescheid.FIELD_BESCHIEDEN_AM)); } - if (isNull(bodyObject.get(BescheidItem.FIELD_BEWILLIGT))) { - throw new TechnicalException("Fields '%s' is required for bescheid creation" .formatted(BescheidItem.FIELD_BEWILLIGT)); + if (isNull(bodyObject.get(Bescheid.FIELD_BEWILLIGT))) { + throw new TechnicalException("Fields '%s' is required for bescheid creation".formatted(Bescheid.FIELD_BEWILLIGT)); } - Optional.ofNullable(MapUtils.getString(bodyObject, BescheidItem.FIELD_SEND_BY)).filter(notExpectedSendByValue) + Optional.ofNullable(MapUtils.getString(bodyObject, Bescheid.FIELD_SEND_BY)).filter(notExpectedSendByValue) .ifPresent(sendBy -> - LOG.warn("Unexpected value for field '%s': %s. Allowed are: %s" .formatted(BescheidItem.FIELD_SEND_BY, sendBy, - String.join(", ", BescheidItem.ACCEPTED_SEND_BY_VALUES))) + LOG.warn("Unexpected value for field '%s': %s. Allowed are: %s".formatted(Bescheid.FIELD_SEND_BY, sendBy, + Arrays.stream(Bescheid.SendBy.values()).map(Bescheid.SendBy::name).collect(Collectors.joining(",")))) ); } @@ -170,14 +176,14 @@ public class AttachedItemService { commandService.createAndWaitUntilDone(buildDeleteItemCommand(command, bescheid)); } - void validateBescheidStatus(BescheidItem bescheid) { - var bescheidStatus = MapUtils.getString(bescheid.getBescheidData(), BescheidItem.FIELD_STATUS); - if (BescheidItem.Status.DRAFT.not(bescheidStatus)) { + void validateBescheidStatus(AttachedItem bescheid) { + var bescheidStatus = MapUtils.getString(bescheid.getItem(), Bescheid.FIELD_STATUS); + if (Bescheid.Status.DRAFT.not(bescheidStatus)) { throw new TechnicalException("Bescheid draft with ID '%s' has an unexpected status: '%s'" .formatted(bescheid.getId(), bescheidStatus)); } } - OzgCloudCommand buildDeleteItemCommand(Command command, BescheidItem bescheid) { + OzgCloudCommand buildDeleteItemCommand(Command command, AttachedItem bescheid) { return OzgCloudCommand.builder() .vorgangId(commandMapper.toOzgCloudVorgangId(command.getVorgangId())) .relationId(commandMapper.mapRelationId(bescheid.getId())) @@ -190,28 +196,25 @@ public class AttachedItemService { return remoteService.getItem(id); } - public void patch(AttachedItem item) { - commandService.createAndWaitUntilDone(buildPatchBescheidCommand(item)); + public void setBescheidStatus(String id, long version, Bescheid.Status status) { + commandService.createAndWaitUntilDone(buildPatchBescheidCommand(id, version, status)); } - OzgCloudCommand buildPatchBescheidCommand(AttachedItem bescheidItem) { + OzgCloudCommand buildPatchBescheidCommand(String bescheidId, long bescheidVersion, Bescheid.Status bescheidStatus) { return OzgCloudCommand.builder() - .vorgangId(commandMapper.toOzgCloudVorgangId(bescheidItem.getVorgangId())) - .relationId(commandMapper.mapRelationId(bescheidItem.getId())) - .relationVersion(bescheidItem.getVersion()) + .relationId(commandMapper.mapRelationId(bescheidId)) + .relationVersion(bescheidVersion) .order(PATCH_ATTACHED_ITEM) - .bodyObject(buildObjectMap(bescheidItem)) + .bodyObject(buildObjectMap(bescheidId, bescheidStatus)) .build(); } - Map<String, Object> buildObjectMap(AttachedItem bescheidItem) { - var bodyObject = new HashMap<String, Object>(); - bodyObject.put(AttachedItem.PROPERTY_ID, bescheidItem.getId()); - bodyObject.put(AttachedItem.PROPERTY_CLIENT, bescheidItem.getClient()); - bodyObject.put(AttachedItem.PROPERTY_VORGANG_ID, bescheidItem.getVorgangId()); - bodyObject.put(AttachedItem.PROPERTY_ITEM_NAME, bescheidItem.getItemName()); - bodyObject.put(AttachedItem.PROPERTY_VERSION, bescheidItem.getVersion()); - bodyObject.put(AttachedItem.PROPERTY_ITEM, bescheidItem.getItem()); - return bodyObject; + Map<String, Object> buildObjectMap(String bescheidId, Bescheid.Status bescheidStatus) { + return Map.of(AttachedItem.PROPERTY_ID, bescheidId, + AttachedItem.PROPERTY_ITEM, Map.of(Bescheid.FIELD_STATUS, bescheidStatus.name())); + } + + public Collection<AttachedItem> findAllBescheid(VorgangId vorgangId) { + return remoteService.findAllBescheid(vorgangId); } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java deleted file mode 100644 index a018068459db579d4c480c4bf7223919d848fd6c..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.bescheid.attacheditem; - -import java.util.Map; -import java.util.Set; - -import lombok.Builder; -import lombok.Getter; - -@Builder(toBuilder = true) -@Getter -@Deprecated(since = "2.6.0") -public class BescheidItem { - - static final Set<String> ACCEPTED_SEND_BY_VALUES = Set.of("POSTFACH", "MANUAL"); - - public static final String PROPERTY_ID = "id"; - public static final String PROPERTY_CLIENT = "client"; - public static final String PROPERTY_VORGANG_ID = "vorgangId"; - public static final String PROPERTY_ITEM_NAME = "itemName"; - public static final String PROPERTY_VERSION = "version"; - public static final String PROPERTY_ITEM = "item"; - - public static final String FIELD_STATUS = "status"; - public static final String FIELD_BESCHIEDEN_AM = "beschiedenAm"; - public static final String FIELD_BEWILLIGT = "bewilligt"; - public static final String FIELD_BESCHEID_DOCUMENT = "bescheidDocument"; - public static final String FIELD_ATTACHMENTS = "attachments"; - public static final String FIELD_SEND_BY = "sendBy"; - public static final String FIELD_NACHRICHT_TEXT = "nachrichtText"; - public static final String FIELD_NACHRICHT_SUBJECT = "nachrichtSubject"; - - private String id; - @Builder.Default - private long version = 0L; - - private String client; - private String vorgangId; - private String itemName; - - private Map<String, Object> bescheidData; - - public enum Status { - DRAFT, BESCHEID, SEND; - - public boolean not(String value) { - return !hasValue(value); - } - - public boolean hasValue(String value) { - return this.name().equalsIgnoreCase(value); - } - } -} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java deleted file mode 100644 index 2c915d65d934abab2636433b02e30a1eaf8e764d..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.bescheid.attacheditem; - -import static java.util.Objects.*; - -import java.util.Collection; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -import org.apache.commons.collections.MapUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; - -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -@Deprecated(since = "2.6.0") -public class BescheidItemMapper { - - private final GrpcObjectMapper grpcObjectMapper; - - public Stream<BescheidItem> fromFindVorgangAttachedItemResponse(GrpcFindVorgangAttachedItemResponse grpcResponse) { - return grpcResponse.getVorgangAttachedItemsList().stream() - .map(this::mapFromVorgangAttachedItem); - } - - BescheidItem mapFromVorgangAttachedItem(GrpcVorgangAttachedItem item) { - return BescheidItem.builder() - .id(item.getId()) - .version(item.getVersion()) - .client(item.getClient()) - .vorgangId(item.getVorgangId()) - .itemName(item.getItemName()) - .bescheidData(grpcObjectMapper.mapFromGrpc(item.getItem())) - .build(); - } - - public GrpcBescheid toBescheid(BescheidItem bescheid) { - var bescheidBuilder = GrpcBescheid.newBuilder().setVersion(bescheid.getVersion()); - Optional.ofNullable(bescheid.getId()).ifPresent(bescheidBuilder::setId); - var bescheidData = bescheid.getBescheidData(); - Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_BESCHIEDEN_AM)).map(StringUtils::trimToNull) - .ifPresent(bescheidBuilder::setBeschiedenAm); - Optional.ofNullable(MapUtils.getBoolean(bescheidData, BescheidItem.FIELD_BEWILLIGT)).ifPresent(bescheidBuilder::setBewilligt); - Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_BESCHEID_DOCUMENT)).map(StringUtils::trimToNull) - .ifPresent(bescheidBuilder::setBescheidDocument); - Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_SEND_BY)).map(StringUtils::trimToNull) - .ifPresent(bescheidBuilder::setSendBy); - Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_NACHRICHT_TEXT)).map(StringUtils::trimToNull) - .ifPresent(bescheidBuilder::setNachrichtText); - Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_NACHRICHT_SUBJECT)).map(StringUtils::trimToNull) - .ifPresent(bescheidBuilder::setNachrichtSubject); - Optional.ofNullable(bescheidData.get(BescheidItem.FIELD_ATTACHMENTS)).map(this::toAttachments).ifPresent(bescheidBuilder::addAllAttachments); - return bescheidBuilder.build(); - } - - @SuppressWarnings("unchecked") - Collection<String> toAttachments(Object attachmentsObject) { - if (attachmentsObject instanceof Collection<?> attachments) { - return (Collection<String>) attachments; - } - if (attachmentsObject instanceof String attachment) { - attachment = StringUtils.trimToNull(attachment); - if (nonNull(attachment)) { - return List.of(attachment); - } - } else if (nonNull(attachmentsObject)) { - return List.of(String.valueOf(attachmentsObject)); - } - return null; //NOSONAR - } -} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/Utils.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/Utils.java index c63bbfe295df2a72118b8a95b9d6188653fea4f4..d8d3d59256d47d46f24f0c6521ff35d74367b220 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/Utils.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/Utils.java @@ -33,7 +33,7 @@ import lombok.NoArgsConstructor; class Utils { public static String extractClient(Command command) { - return MapUtils.getString(command.getBodyObject(), BescheidItem.PROPERTY_CLIENT); + return MapUtils.getString(command.getBodyObject(), AttachedItem.PROPERTY_CLIENT); } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java index aa6709149d8d968e263c86e0197e281ff99c3a8e..ff07e6d16434e02343d1a07605c8351330d640ba 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java @@ -27,13 +27,17 @@ import static de.ozgcloud.bescheid.attacheditem.AttachedItemService.*; import java.time.LocalDate; import java.util.Comparator; +import java.util.List; import java.util.Optional; +import java.util.stream.Stream; import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; +import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest; import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub; @@ -45,9 +49,9 @@ import net.devh.boot.grpc.client.inject.GrpcClient; @Log4j2 class VorgangAttachedItemRemoteService { - private static final Comparator<BescheidItem> BY_BESCHIEDEN_AM_DESC = (bescheid1, bescheid2) -> { - var beschiedenAm1 = LocalDate.parse(MapUtils.getString(bescheid1.getBescheidData(), BescheidItem.FIELD_BESCHIEDEN_AM)); - var beschiedenAm2 = LocalDate.parse(MapUtils.getString(bescheid2.getBescheidData(), BescheidItem.FIELD_BESCHIEDEN_AM)); + private static final Comparator<AttachedItem> BY_BESCHIEDEN_AM_DESC = (bescheid1, bescheid2) -> { + var beschiedenAm1 = LocalDate.parse(MapUtils.getString(bescheid1.getItem(), Bescheid.FIELD_BESCHIEDEN_AM)); + var beschiedenAm2 = LocalDate.parse(MapUtils.getString(bescheid2.getItem(), Bescheid.FIELD_BESCHIEDEN_AM)); return beschiedenAm2.compareTo(beschiedenAm1); }; @@ -56,14 +60,16 @@ class VorgangAttachedItemRemoteService { @Autowired private ClientInterceptor bescheidCallContextInterceptor; @Autowired - private BescheidItemMapper bescheidItemMapper; - @Autowired private AttachedItemMapper attachedItemMapper; - public Optional<BescheidItem> findBescheidDraft(String vorgangId) { + public Optional<AttachedItem> findBescheidDraft(String vorgangId) { return findBescheidDraft(buildFindRequest(vorgangId)); } + public List<AttachedItem> findAllBescheid(VorgangId vorgangId) { + return findAllBescheid(buildFindRequest(vorgangId.toString())).toList(); + } + GrpcFindVorgangAttachedItemRequest buildFindRequest(String vorgangId) { return GrpcFindVorgangAttachedItemRequest.newBuilder() .setVorgangId(vorgangId) @@ -72,10 +78,8 @@ class VorgangAttachedItemRemoteService { .build(); } - Optional<BescheidItem> findBescheidDraft(GrpcFindVorgangAttachedItemRequest request) { - var grpcResponse = getServiceStub().find(request); - var bescheidItems = bescheidItemMapper.fromFindVorgangAttachedItemResponse(grpcResponse).filter(this::hasStatusDraft) - .sorted(BY_BESCHIEDEN_AM_DESC).toList(); + Optional<AttachedItem> findBescheidDraft(GrpcFindVorgangAttachedItemRequest request) { + var bescheidItems = findAllBescheid(request).filter(this::hasStatusDraft).toList(); if (bescheidItems.size() > 1) { LOG.error("Found more than one ({}) draft bescheid for vorgangId: {}. Return one with last beschiedenAm date", bescheidItems.size(), bescheidItems.getFirst().getVorgangId()); @@ -83,13 +87,19 @@ class VorgangAttachedItemRemoteService { return bescheidItems.isEmpty() ? Optional.empty() : Optional.of(bescheidItems.getFirst()); } - boolean hasStatusDraft(BescheidItem bescheidItem) { - return BescheidItem.Status.DRAFT.hasValue(MapUtils.getString(bescheidItem.getBescheidData(), BescheidItem.FIELD_STATUS)); + Stream<AttachedItem> findAllBescheid(GrpcFindVorgangAttachedItemRequest request) { + var grpcResponse = getServiceStub().find(request); + return grpcResponse.getVorgangAttachedItemsList().stream().map(attachedItemMapper::mapFromVorgangAttachedItem) + .sorted(BY_BESCHIEDEN_AM_DESC); + } + + boolean hasStatusDraft(AttachedItem bescheidItem) { + return Bescheid.Status.DRAFT.hasValue(bescheidItem.getItem().get(Bescheid.FIELD_STATUS)); } - public BescheidItem getBescheid(String bescheidId) { + public AttachedItem getBescheid(String bescheidId) { var grpcVorgangAttachedItemResponse = getServiceStub().getById(buildGetByIdRequest(bescheidId)); - return bescheidItemMapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()); + return attachedItemMapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()); } public AttachedItem getItem(String id) { diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attributes/ClientAttributeService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attributes/ClientAttributeService.java index 1bd31a95ad2bcafe9628557b233b0cb5799f0060..158597163c2ee60cfc4640a47e4704b453bda5b6 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attributes/ClientAttributeService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attributes/ClientAttributeService.java @@ -31,7 +31,7 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class ClientAttributeService { - public static final String ATTRIBUTE_NAME_ANTRAG_BEWILLIGT = "ANTRAG_BEWILLIGT"; + public static final String ATTRIBUTE_NAME_ANTRAG_BEWILLIGT = "antragBewilligt"; private final ClientAttributeRemoteService bescheidClientAttributeRemoteService; diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java index fc4a6e29d4b5b32820dc96b93c8d93e36eea985c..52d79a92202cba4286beaba7902536675abb679f 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java @@ -2,29 +2,43 @@ package de.ozgcloud.bescheid.nachricht; import java.io.IOException; import java.io.StringWriter; +import java.util.Map; import java.util.Objects; import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import de.ozgcloud.apilib.common.command.OzgCloudCommand; +import de.ozgcloud.apilib.common.command.OzgCloudCommandService; +import de.ozgcloud.apilib.common.command.grpc.CommandMapper; import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.vorgang.Vorgang.PostfachAddress; import de.ozgcloud.common.errorhandling.TechnicalException; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; +import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @Service @Log4j2 +@RequiredArgsConstructor public class NachrichtService { - @Autowired - private NachrichtRemoteService remoteService; + public static final String SEND_POSTFACH_NACHRICHT_ORDER = "SEND_POSTFACH_NACHRICHT"; + public static final String FIELD_POSTFACH_ID = "postfachId"; + static final String FIELD_REPLY_OPTION = "replyOption"; + static final String REPLY_OPTION = "POSSIBLE"; + static final String FIELD_SUBJECT = "subject"; + static final String FIELD_MAIL_BODY = "mailBody"; + static final String FIELD_ATTACHMENTS = "attachments"; - @Autowired - private Configuration freemarkerCfg; + private final NachrichtRemoteService remoteService; + private final Configuration freemarkerCfg; + private final OzgCloudCommandService commandService; + private final CommandMapper commandMapper; static final String SUBJECT = "Ihr Antrag"; @@ -45,14 +59,6 @@ public class NachrichtService { .build()); } - Optional<PostfachAddress> getAddress(Bescheid bescheid) { - var serviceKonto = bescheid.getServiceKonto(); - if (Objects.nonNull(serviceKonto)) { - return Optional.of(serviceKonto.getPostfachAddresses().get(0)); - } - return Optional.empty(); - } - String buildMessage(Bescheid bescheid) { return bescheid.getNachrichtText() .orElseGet(() -> fillTemplate(TEMPLATE_FILE, bescheid)); @@ -77,4 +83,46 @@ public class NachrichtService { throw new TechnicalException("Error loading mail template", e); } } + + public void sendNachricht(Bescheid bescheid) { + var commandToCreate = buildSendBescheidCommand(bescheid); + commandService.createAndWaitUntilDone(commandToCreate); + } + + OzgCloudCommand buildSendBescheidCommand(Bescheid bescheid) { + return OzgCloudCommand.builder() + .vorgangId(commandMapper.toOzgCloudVorgangId(bescheid.getVorgangId().toString())) + .relationId(commandMapper.mapRelationId(bescheid.getVorgangId().toString())) + .order(SEND_POSTFACH_NACHRICHT_ORDER) + .createdBy(commandMapper.toOzgCloudUserId(bescheid.getCreatedBy().toString())) + .bodyObject(buildSendNachrichtCommandBody(bescheid)) + .build(); + } + + Map<String, Object> buildSendNachrichtCommandBody(Bescheid bescheid) { + return Map.of(FIELD_POSTFACH_ID, getPostfachId(bescheid), + FIELD_REPLY_OPTION, REPLY_OPTION, + FIELD_SUBJECT, bescheid.getNachrichtSubject().orElse(SUBJECT), + FIELD_MAIL_BODY, bescheid.getNachrichtText().orElse(StringUtils.EMPTY), + FIELD_ATTACHMENTS, bescheid.getBescheidFileId().toString() + ); + + } + + String getPostfachId(Bescheid bescheid) { + return getAddress(bescheid) + .map(PostfachAddress::getIdentifier) + .map(identifier -> MapUtils.getString(identifier, FIELD_POSTFACH_ID)) + .filter(StringUtils::isNotBlank) + .orElseThrow(() -> new TechnicalException("No PostfachId found for Bescheid (vorgangId: %s)".formatted(bescheid.getVorgangId()))); + } + + Optional<PostfachAddress> getAddress(Bescheid bescheid) { + var serviceKonto = bescheid.getServiceKonto(); + if (Objects.nonNull(serviceKonto)) { + return Optional.of(serviceKonto.getPostfachAddresses().get(0)); + } + return Optional.empty(); + } + } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java index 15ab8a87d9ffee2ef4c5a532a924c16d2405a5da..8afc3d2ba7b37ed2b79a2574c946473bcf9ae7e6 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java @@ -26,7 +26,7 @@ public class VorgangService { bescheiden(getById(VorgangId.from(vorgangId))); } - public void bescheiden(Vorgang vorgang) { + private void bescheiden(Vorgang vorgang) { commandService.createAndWaitUntilDone(buildBescheidenCommand(vorgang)); } @@ -39,8 +39,4 @@ public class VorgangService { .build(); } - public Vorgang.ServiceKonto getServiceKonto(String vorgangId) { - var vorgang = getById(VorgangId.from(vorgangId)); - return vorgang.getServiceKonto(); - } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java index 25838cf4939ce8d9b2db28ac1f2bf404a83304e7..a8b47587248d0a8b9e91d315b4a3d422304f13f3 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java @@ -38,8 +38,8 @@ import de.ozgcloud.apilib.common.command.OzgCloudCommandService; import de.ozgcloud.apilib.common.command.grpc.CommandMapper; import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; +import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; -import de.ozgcloud.bescheid.attacheditem.BescheidItem; import de.ozgcloud.command.Command; import de.ozgcloud.common.errorhandling.TechnicalException; import lombok.RequiredArgsConstructor; @@ -77,9 +77,9 @@ public class DocumentService { } void validateBescheidItem(String bescheidId) { - var bescheidData = attachedItemService.getBescheidItem(bescheidId).getBescheidData(); - var status = MapUtils.getString(bescheidData, BescheidItem.FIELD_STATUS); - if (BescheidItem.Status.DRAFT.not(status)) { + var bescheidData = attachedItemService.getBescheidItem(bescheidId).getItem(); + var status = MapUtils.getString(bescheidData, Bescheid.FIELD_STATUS); + if (Bescheid.Status.DRAFT.not(status)) { throw new TechnicalException("Bescheid is not in draft status"); } } @@ -95,10 +95,10 @@ public class DocumentService { Map<String, Object> buildAttachedItem(Command command, Map<String, Object> itemMap) { var result = new HashMap<String, Object>(); - result.put(BescheidItem.PROPERTY_VORGANG_ID, command.getVorgangId()); - result.put(BescheidItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); - result.put(BescheidItem.PROPERTY_ITEM_NAME, DOCUMENT_ITEM_NAME); - result.put(BescheidItem.PROPERTY_ITEM, itemMap); + result.put(AttachedItem.PROPERTY_VORGANG_ID, command.getVorgangId()); + result.put(AttachedItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); + result.put(AttachedItem.PROPERTY_ITEM_NAME, DOCUMENT_ITEM_NAME); + result.put(AttachedItem.PROPERTY_ITEM, itemMap); return result; } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java index 654825eb6bf6070b6651da59af1554a6e4669227..babf3dda4bd227f6fb19bea788f0980c54faaf1a 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java @@ -10,6 +10,7 @@ import java.util.Map; import java.util.Optional; import java.util.function.Consumer; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -23,6 +24,7 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.security.core.context.SecurityContext; import org.springframework.test.util.ReflectionTestUtils; +import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory; import de.ozgcloud.bescheid.binaryfile.BinaryFileService; @@ -35,6 +37,7 @@ import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandCreatedEventTestFactory; import de.ozgcloud.command.CommandFailedEvent; import de.ozgcloud.command.CommandTestFactory; +import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.document.BescheidDocumentCreatedEvent; import de.ozgcloud.document.DocumentService; @@ -495,74 +498,83 @@ class BescheidEventListenerTest { @Nested class TestDoSendBescheid { - private static final Command COMMAND = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID) - .relationVersion(AttachedItemTestFactory.VERSION).build(); - @Captor private ArgumentCaptor<BescheidSentEvent> bescheidSentEventCaptor; @Test - void shouldCallSendBescheid() { - - listener.doSendBescheid(COMMAND); + void shouldThrowExceptionIfUnkonwnSendBy() { + var item = AttachedItemTestFactory.createBescheidItem(); + item.put(Bescheid.FIELD_SEND_BY, "unknown"); + var bescheidItem = AttachedItemTestFactory.createBescheidBuilder().item(item).build(); + when(attachedItemService.getItem(any())).thenReturn(bescheidItem); + var command = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID).build(); - verify(service).sendBescheidManually(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION); + Assertions.assertThrows(TechnicalException.class, () -> listener.doSendBescheid(command)); } - @Test - void shouldPublishEvent() { - listener.doSendBescheid(COMMAND); + @DisplayName("manually") + @Nested + class TestManually { - verify(eventPublisher).publishEvent(bescheidSentEventCaptor.capture()); - assertThat(bescheidSentEventCaptor.getValue().getCommand()).isEqualTo(COMMAND); - } - } + private static final Command COMMAND = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID) + .relationVersion(AttachedItemTestFactory.VERSION).bodyObject(AttachedItemTestFactory.createBescheidItem()).build(); - @Nested - class TestOnSendPostfachMailCommand { + private final AttachedItem bescheidItem = AttachedItemTestFactory.createBescheid(); - private final Command command = CommandTestFactory.create(); + @BeforeEach + void init() { + when(attachedItemService.getItem(any())).thenReturn(bescheidItem); + } - @Test - void shouldCallRunWithSecurityContext() { - listener.onSendPostfachMailCommand(CommandCreatedEventTestFactory.withCommand(command)); + @Test + void shouldCallSendBescheid() { + listener.doSendBescheid(COMMAND); - verify(listener).runWithSecurityContext(eq(command), any()); - } + verify(service).sendBescheidManually(bescheidItem, AttachedItemTestFactory.VERSION); + verify(service, never()).sendBescheidPostfachMail(any(), anyLong()); + } - @Test - void shouldExecuteDoSendPostfachMail() { - listener.onSendPostfachMailCommand(CommandCreatedEventTestFactory.withCommand(command)); + @Test + void shouldPublishEvent() { + listener.doSendBescheid(COMMAND); - verify(listener).doSendPostfachMail(command); + verify(eventPublisher).publishEvent(bescheidSentEventCaptor.capture()); + assertThat(bescheidSentEventCaptor.getValue().getCommand()).isEqualTo(COMMAND); + } } - } - @Nested - class TestDoSendPostfachMail { + @DisplayName("per postfach mail") + @Nested + class TestPostfachMail { - @Captor - private ArgumentCaptor<BescheidSentEvent> bescheidSentEventCaptor; + private static final Command COMMAND = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID) + .relationVersion(AttachedItemTestFactory.VERSION).bodyObject(AttachedItemTestFactory.createBescheidItem()).build(); - @Test - void shouldCallBescheidService() { - var bescheidId = "bescheid-id"; - var bescheidVersion = 1L; - var command = CommandTestFactory.createBuilder().relationId(bescheidId).relationVersion(bescheidVersion).build(); + private AttachedItem bescheidItem; - listener.doSendPostfachMail(command); + @BeforeEach + void init() { + var item = AttachedItemTestFactory.createBescheidItem(); + item.put(Bescheid.FIELD_SEND_BY, Bescheid.SendBy.NACHRICHT.name()); + bescheidItem = AttachedItemTestFactory.createBescheidBuilder().item(item).build(); + when(attachedItemService.getItem(any())).thenReturn(bescheidItem); + } - verify(service).sendBescheidPostfachMail(bescheidId, bescheidVersion); - } + @Test + void shouldCallBescheidService() { + listener.doSendBescheid(COMMAND); - @Test - void shouldPublishEvent() { - var command = CommandTestFactory.createBuilder().relationVersion(0L).build(); + verify(service).sendBescheidPostfachMail(bescheidItem, AttachedItemTestFactory.VERSION); + verify(service, never()).sendBescheidManually(any(), anyLong()); + } - listener.doSendPostfachMail(command); + @Test + void shouldPublishEvent() { + listener.doSendBescheid(COMMAND); - verify(eventPublisher).publishEvent(bescheidSentEventCaptor.capture()); - assertThat(bescheidSentEventCaptor.getValue().getCommand()).isEqualTo(command); + verify(eventPublisher).publishEvent(bescheidSentEventCaptor.capture()); + assertThat(bescheidSentEventCaptor.getValue().getCommand()).isEqualTo(COMMAND); + } } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java index 4d965a689be4c55ce1a9909c85fa8e013eb2da7e..d5add97a8f5ac99853f9e90a44534a8174f4d76a 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java @@ -4,8 +4,11 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; +import java.util.Collections; +import java.util.List; import java.util.Optional; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; @@ -14,9 +17,12 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.bescheid.attacheditem.AttachedItem; +import de.ozgcloud.bescheid.attacheditem.AttachedItemMapper; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; -import de.ozgcloud.bescheid.attacheditem.BescheidItemMapper; -import de.ozgcloud.bescheid.attacheditem.BescheidItemTestFactory; +import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory; +import de.ozgcloud.bescheid.vorgang.VorgangId; +import de.ozgcloud.command.CommandTestFactory; import io.grpc.stub.StreamObserver; class BescheidGrpcServiceTest { @@ -28,7 +34,11 @@ class BescheidGrpcServiceTest { @Mock private AttachedItemService attachedItemService; @Mock - private BescheidItemMapper mapper; + private AttachedItemMapper attachedItemMapper; + @Mock + private BescheidService bescheidService; + @Mock + private GrpcBescheidMapper grpcBescheidMapper; @Nested class TestGetBescheidDraft { @@ -44,19 +54,20 @@ class BescheidGrpcServiceTest { @Test void shouldBuildResponse() { - when(mapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); - when(attachedItemService.findBescheidItem(any())).thenReturn(Optional.of(BescheidItemTestFactory.create())); + when(attachedItemMapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); + var bescheidItem = AttachedItemTestFactory.createBescheid(); + when(attachedItemService.findBescheidItem(any())).thenReturn(Optional.of(bescheidItem)); service.getBescheidDraft(request, responseObserver); - verify(service).buildResponse(any()); + verify(service).buildGetBescheidDraftResponse(bescheidItem); } @Test void shouldCallNext() { - when(mapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); - when(service.buildResponse(any())).thenReturn(response); - when(attachedItemService.findBescheidItem(any())).thenReturn(Optional.of(BescheidItemTestFactory.create())); + when(attachedItemMapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); + when(service.buildGetBescheidDraftResponse(any())).thenReturn(response); + when(attachedItemService.findBescheidItem(any())).thenReturn(Optional.of(AttachedItemTestFactory.createBescheid())); service.getBescheidDraft(request, responseObserver); @@ -81,27 +92,189 @@ class BescheidGrpcServiceTest { } @Nested - class TestBuildResponse { + class TestBuildGetBescheidDraftResponse { @Test void shouldCallMapper() { - when(mapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); - var bescheid = BescheidItemTestFactory.create(); + when(attachedItemMapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); + var bescheid = AttachedItemTestFactory.createBescheid(); - service.buildResponse(bescheid); + service.buildGetBescheidDraftResponse(bescheid); - verify(mapper).toBescheid(bescheid); + verify(attachedItemMapper).toBescheid(bescheid); } @Test void shouldSetBescheid() { var grpcBescheid = GrpcBescheidTestFactory.create(); - when(mapper.toBescheid(any())).thenReturn(grpcBescheid); + when(attachedItemMapper.toBescheid(any())).thenReturn(grpcBescheid); - var response = service.buildResponse(BescheidItemTestFactory.create()); + var response = service.buildGetBescheidDraftResponse(AttachedItemTestFactory.createBescheid()); assertThat(response.getBescheid()).isEqualTo(grpcBescheid); } } + @Nested + class TestGetConfig { + + private static final GrpcBescheidManagerConfigResponse RESPONSE = GrpcBescheidManagerConfigResponse.newBuilder().build(); + + @Mock + private GrpcBescheidManagerConfigRequest request; + @Mock + private StreamObserver<GrpcBescheidManagerConfigResponse> responseObserver; + @Captor + private ArgumentCaptor<GrpcBescheidManagerConfigResponse> responseCaptor; + + @Test + void shouldCallBescheidService() { + getConfig(); + + verify(bescheidService).getConfig(); + } + + @Test + void shouldCallGrpcBescheidMapper() { + var config = BescheidManagerConfigTestFactory.create(); + when(bescheidService.getConfig()).thenReturn(config); + + getConfig(); + + verify(grpcBescheidMapper).fromBescheidManagerConfig(config); + } + + @Test + void shouldCallNext() { + when(grpcBescheidMapper.fromBescheidManagerConfig(any())).thenReturn(RESPONSE); + + getConfig(); + + verify(responseObserver).onNext(RESPONSE); + } + + @Test + void shouldCallCompleted() { + getConfig(); + + verify(responseObserver).onCompleted(); + } + + private void getConfig() { + service.getConfig(request, responseObserver); + } + } + + @Nested + class TestGetAll { + + private static final GrpcGetAllBescheidResponse RESPONSE = GrpcGetAllBescheidResponse.newBuilder().build(); + @Mock + private GrpcGetAllBescheidRequest request; + @Mock + private StreamObserver<GrpcGetAllBescheidResponse> responseObserver; + @Captor + private ArgumentCaptor<GrpcGetAllBescheidResponse> responseCaptor; + @Captor + private ArgumentCaptor<VorgangId> vorgangIdCaptor; + + @BeforeEach + void init() { + when(request.getVorgangId()).thenReturn(CommandTestFactory.VORGANG_ID); + doReturn(RESPONSE).when(service).buildGetAllBescheidResponse(anyCollection()); + } + + @Test + void shouldCallFindAllBescheid() { + service.getAll(request, responseObserver); + + verify(attachedItemService).findAllBescheid(vorgangIdCaptor.capture()); + assertThat(vorgangIdCaptor.getValue()).hasToString(CommandTestFactory.VORGANG_ID); + } + + @Test + void shouldCallBuildResponse() { + var expectedBescheidItem = AttachedItemTestFactory.createBescheid(); + when(attachedItemService.findAllBescheid(any())).thenReturn(List.of(expectedBescheidItem)); + + service.getAll(request, responseObserver); + + verify(service).buildGetAllBescheidResponse(List.of(expectedBescheidItem)); + } + + @Test + void shouldCallOnNext() { + service.getAll(request, responseObserver); + + verify(responseObserver).onNext(RESPONSE); + } + + @Test + void shouldCallOnCompleted() { + service.getAll(request, responseObserver); + + verify(responseObserver).onCompleted(); + } + } + + @Nested + class TestBuildResponseAllBescheid { + + private static final GrpcBescheid GRPC_BESCHEID = GrpcBescheidTestFactory.create(); + + @Mock + private AttachedItem attachedItem; + + @BeforeEach + void init() { + doReturn(Collections.singletonList(GRPC_BESCHEID)).when(service).mapBescheid(anyCollection()); + } + + @Test + void shouldCallMapBescheid() { + var bescheidItems = Collections.singleton(attachedItem); + + service.buildGetAllBescheidResponse(bescheidItems); + + verify(service).mapBescheid(bescheidItems); + } + + @Test + void shouldReturnResponse() { + var bescheidItems = Collections.singleton(attachedItem); + + var response = service.buildGetAllBescheidResponse(bescheidItems); + + assertThat(response.getBescheidList()).containsExactly(GRPC_BESCHEID); + } + } + + @Nested + class TestMapBescheid { + + private static final GrpcBescheid GRPC_BESCHEID = GrpcBescheidTestFactory.create(); + + @Mock + private AttachedItem attachedItem; + + @BeforeEach + void init() { + when(attachedItemMapper.toBescheid(attachedItem)).thenReturn(GRPC_BESCHEID); + } + + @Test + void shouldCallMapper() { + service.mapBescheid(Collections.singleton(attachedItem)); + + verify(attachedItemMapper).toBescheid(attachedItem); + } + + @Test + void shouldSetBescheid() { + var result = service.mapBescheid(Collections.singleton(attachedItem)); + + assertThat(result).containsExactly(GRPC_BESCHEID); + } + + } } diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidManagerConfigTestFactory.java similarity index 63% rename from nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.java rename to bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidManagerConfigTestFactory.java index 3aa0719d3574451bd919d365e4dee250405bab2f..cdd3c20e856282db187f1f101422e449e2ecd354 100644 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidManagerConfigTestFactory.java @@ -21,23 +21,24 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.nachrichten.postfach.bayernid; +package de.ozgcloud.bescheid; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; +import de.ozgcloud.bescheid.BescheidManagerConfig.BescheidManagerConfigBuilder; +import de.ozgcloud.bescheid.BescheidManagerConfig.Features; -public class GrpcSendBayernIdMessageResponseTestFactory { +public class BescheidManagerConfigTestFactory { - public static final String STATUS = "code"; - public static final String MESSAGE_TEXT = "messageText"; + public static final String VERSION = "1.0.0"; + public static final String JAVA_VERSION = "21"; - public static GrpcSendBayernIdMessageResponse create() { + public static BescheidManagerConfig create() { return createBuilder().build(); } - public static GrpcSendBayernIdMessageResponse.Builder createBuilder() { - return GrpcSendBayernIdMessageResponse.newBuilder() - .setSuccess(true) - .setStatus(STATUS) - .setMessage(MESSAGE_TEXT); + public static BescheidManagerConfigBuilder createBuilder() { + return BescheidManagerConfig.builder() + .version(VERSION) + .javaVersion(JAVA_VERSION) + .features(Features.builder().canCreateBescheidDocument(true).build()); } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java index 2d80f5de69e2af46c5a3d1ad6dba7229f4e2932d..9f96b98a60c87a1fcb1494d4293c169c0bcf0e9f 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java @@ -5,7 +5,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import java.util.Collections; import java.util.Map; import java.util.Optional; @@ -20,6 +19,7 @@ import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import org.springframework.boot.info.BuildProperties; import org.springframework.test.util.ReflectionTestUtils; import de.ozgcloud.bescheid.attacheditem.AttachedItem; @@ -57,6 +57,8 @@ class BescheidServiceTest { private UserProfile callContextUser; @Mock private ClientAttributeService clientAttributeService; + @Mock + private BuildProperties buildProperties; @BeforeEach void init() { @@ -107,14 +109,6 @@ class BescheidServiceTest { @BeforeEach void init() { doNothing().when(service).validateBescheidSendManually(any(), anyLong()); - doReturn(bescheidItem).when(attachedItemService).getItem(anyString()); - } - - @Test - void shouldCallGetItem() { - sendBescheid(); - - verify(attachedItemService).getItem(AttachedItemTestFactory.ID); } @Test @@ -132,7 +126,7 @@ class BescheidServiceTest { } private void sendBescheid() { - service.sendBescheidManually(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION); + service.sendBescheidManually(bescheidItem, AttachedItemTestFactory.VERSION); } } @@ -171,7 +165,7 @@ class BescheidServiceTest { @Nested class TestSendBescheidPostfachMail { - private final AttachedItem bescheidItem = AttachedItemTestFactory.createBescheid(); + private AttachedItem bescheidItem; @Mock private AttachedItem bescheidSendItem; @Captor @@ -179,21 +173,15 @@ class BescheidServiceTest { @BeforeEach void init() { + var item = AttachedItemTestFactory.createBescheidItem(); + item.put(Bescheid.FIELD_SEND_BY, Bescheid.SendBy.NACHRICHT.name()); + bescheidItem = AttachedItemTestFactory.createBescheidBuilder().item(item).build(); + doNothing().when(service).validateBescheidSendPostfach(any(), anyLong()); - doReturn(bescheidItem).when(attachedItemService).getItem(anyString()); lenient().when(callContextUser.getId()).thenReturn(UserId.from("user-id")); lenient().when(currentUserService.getUserProfile()).thenReturn(callContextUser); } - @Test - void shouldCallGetItem() { - when(vorgangService.getById(any())).thenReturn(VorgangTestFactory.create()); - - sendBescheid(); - - verify(attachedItemService).getItem(AttachedItemTestFactory.ID); - } - @Test void shouldCallValidateBescheid() { when(vorgangService.getById(any())).thenReturn(VorgangTestFactory.create()); @@ -232,7 +220,7 @@ class BescheidServiceTest { sendBescheid(); - verify(nachrichtService).createNachrichtDraft(bescheid); + verify(nachrichtService).sendNachricht(bescheid); } @Test @@ -245,7 +233,7 @@ class BescheidServiceTest { } private void sendBescheid() { - service.sendBescheidPostfachMail(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION); + service.sendBescheidPostfachMail(bescheidItem, AttachedItemTestFactory.VERSION); } } @@ -473,19 +461,10 @@ class BescheidServiceTest { private AttachedItem bescheidSendItem; @Test - void shouldCallBuildBescheidSend() { - sendBescheid(); - - verify(service).setBescheidSendStatus(bescheidItem); - } - - @Test - void shouldCallPatch() { - doReturn(bescheidSendItem).when(service).setBescheidSendStatus(any()); - + void shouldCallSetBescheidStatusSent() { sendBescheid(); - verify(attachedItemService).patch(bescheidSendItem); + verify(attachedItemService).setBescheidStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.SENT); } @Test @@ -496,34 +475,12 @@ class BescheidServiceTest { } @Test - void shouldCallGetItem() { - when(attachedItemService.getItem(any())).thenReturn(AttachedItemTestFactory.createBescheid()); - doThrow(new TechnicalException("error")).when(vorgangService).bescheiden(anyString()); - - assertThrows(TechnicalException.class, this::sendBescheid); - - verify(attachedItemService).getItem(AttachedItemTestFactory.ID); - } - - @Test - void shouldCallSetBescheidDraftStatus() { - doThrow(new TechnicalException("error")).when(vorgangService).bescheiden(anyString()); - var updatedBescheidUitem = AttachedItemTestFactory.createBescheid(); - when(attachedItemService.getItem(any())).thenReturn(updatedBescheidUitem); - - assertThrows(TechnicalException.class, this::sendBescheid); - - verify(service).setBescheidDraftStatus(updatedBescheidUitem); - } - - @Test - void shouldCallPatchWhenBescheidenFails() { - doReturn(bescheidSendItem).when(service).setBescheidDraftStatus(any()); + void shouldCallSetBescheidStatusDraft() { doThrow(new TechnicalException("error")).when(vorgangService).bescheiden(anyString()); assertThrows(TechnicalException.class, this::sendBescheid); - verify(attachedItemService).patch(bescheidSendItem); + verify(attachedItemService).setBescheidStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.SENT); } @Test @@ -570,28 +527,77 @@ class BescheidServiceTest { } @Nested - class TestSetBescheidSendStatus { + class TestGetConfig { @Test - void shouldSetSendStatus() { - var bescheidItem = AttachedItemTestFactory.createBescheid(); + void shouldCallGetVersion() { + service.getConfig(); + + verify(buildProperties).getVersion(); + } + + @Test + void shouldSetBescheidManagerVersion() { + when(buildProperties.getVersion()).thenReturn(BescheidManagerConfigTestFactory.VERSION); + + var result = service.getConfig(); + + assertThat(result.getVersion()).isEqualTo(BescheidManagerConfigTestFactory.VERSION); + } + + @Test + void shouldCallGetJavaVersion() { + service.getConfig(); + + verify(service).getJavaVersion(); + } + + @Test + void shouldSetJavaVersion() { + when(service.getJavaVersion()).thenReturn(BescheidManagerConfigTestFactory.JAVA_VERSION); + + var result = service.getConfig(); + + assertThat(result.getJavaVersion()).isEqualTo(BescheidManagerConfigTestFactory.JAVA_VERSION); + } + + @Test + void shouldCallBuildFeatures() { + service.getConfig(); + + verify(service).buildFeatures(); + } - var result = service.setBescheidSendStatus(bescheidItem); + @Test + void shouldSetFeatures() { + var features = BescheidManagerConfig.Features.builder().build(); + when(service.buildFeatures()).thenReturn(features); + + var result = service.getConfig(); - assertThat(result.getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SEND.name()); + assertThat(result.getFeatures()).isSameAs(features); } + } @Nested - class TestSetBescheidDraftStatus { + class TestBuildFeatures { @Test - void shouldSetDraftStatus() { - var bescheidItem = AttachedItemTestFactory.createBescheidBuilder().item(Collections.emptyMap()).build(); + void shouldSetCannotCreateBescheidDocument() { + ReflectionTestUtils.setField(service, "remoteService", Optional.empty()); + + var result = service.buildFeatures(); - var result = service.setBescheidDraftStatus(bescheidItem); + assertThat(result.isCanCreateBescheidDocument()).isFalse(); + } + + @Test + void shouldSetCanCreateBescheidDocument() { + var result = service.buildFeatures(); - assertThat(result.getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name()); + assertThat(result.isCanCreateBescheidDocument()).isTrue(); } + } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java index a0fac1f66bc68d8fe0056ca38c34f551ac163e63..12469cfc9df73ca8a18c288c3a6ae5c68f4921cb 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java @@ -10,6 +10,7 @@ import com.thedeanda.lorem.LoremIpsum; import de.ozgcloud.bescheid.common.callcontext.UserProfileTestFactory; import de.ozgcloud.bescheid.vorgang.ServiceKontoTestFactory; import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; +import de.ozgcloud.common.binaryfile.FileId; import de.ozgcloud.common.binaryfile.TempFileUtils; public class BescheidTestFactory { @@ -36,6 +37,7 @@ public class BescheidTestFactory { .contentType(CONTENT_TYPE) .bescheidFileName(FILE_NAME) .bescheidFile(BESCHEID_FILE) + .bescheidFileId(FileId.from(BESCHEID_FILE_ID)) .nachrichtSubject(Optional.of(NACHRICHT_SUBJECT)) .nachrichtText(Optional.of(NACHRICHT_TEXT)) .genehmigt(true) diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidItemMapperTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidItemMapperTest.java index e68c1c2a0516915186443a7d9e0fabf317ec1a60..169c80a19cc0c8251b93f846f72c40269dab08aa 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidItemMapperTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidItemMapperTest.java @@ -8,7 +8,7 @@ import org.mapstruct.factory.Mappers; class GrpcBescheidItemMapperTest { - private GrpcBescheidMapper mapper = Mappers.getMapper(GrpcBescheidMapper.class); + private final GrpcBescheidMapper mapper = Mappers.getMapper(GrpcBescheidMapper.class); @Nested class TestFromBescheid { @@ -21,4 +21,15 @@ class GrpcBescheidItemMapperTest { } } + @Nested + class TestFromBescheidManagerConfig { + + @Test + void shouldMapAllFields() { + var result = mapper.fromBescheidManagerConfig(BescheidManagerConfigTestFactory.create()); + + assertThat(result).usingRecursiveComparison().isEqualTo(GrpcBescheidManagerConfigResponseTestFactory.create()); + } + } + } diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcAttachmentMetadataTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java similarity index 66% rename from nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcAttachmentMetadataTestFactory.java rename to bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java index 6972e7a9c35f9c887e32565a392e1d483282d1ba..2657fdf48c5a7727715ec7c26bf3fb94b232b95f 100644 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcAttachmentMetadataTestFactory.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java @@ -21,20 +21,18 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.nachrichten.postfach.bayernid.proxy; +package de.ozgcloud.bescheid; -public class GrpcAttachmentMetadataTestFactory { +public class GrpcBescheidManagerConfigResponseTestFactory { - public static final String FILE_TYPE = "plain/text"; - public static final String FILE_NAME = "test.txt"; - - public static GrpcAttachmentMetadata create() { + public static GrpcBescheidManagerConfigResponse create() { return createBuilder().build(); } - public static GrpcAttachmentMetadata.Builder createBuilder() { - return GrpcAttachmentMetadata.newBuilder() - .setFileType(FILE_TYPE) - .setFileName(FILE_NAME); + public static GrpcBescheidManagerConfigResponse.Builder createBuilder() { + return GrpcBescheidManagerConfigResponse.newBuilder() + .setVersion(BescheidManagerConfigTestFactory.VERSION) + .setJavaVersion(BescheidManagerConfigTestFactory.JAVA_VERSION) + .setFeatures(GrpcBescheidManagerFeatures.newBuilder().setCanCreateBescheidDocument(true).build()); } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapperTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapperTest.java index 782c98d8cc4bc4066b43d34e9a45334d724ca7d5..14414597f4bc01bf08565e9c6cedd9bf37d666e1 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapperTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapperTest.java @@ -26,36 +26,177 @@ package de.ozgcloud.bescheid.attacheditem; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; +import java.util.List; +import java.util.Map; + 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.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.NullAndEmptySource; import org.mapstruct.factory.Mappers; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Spy; +import de.ozgcloud.bescheid.Bescheid; +import de.ozgcloud.bescheid.GrpcBescheid; import de.ozgcloud.document.DocumentService; import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; class AttachedItemMapperTest { + @Spy @InjectMocks private AttachedItemMapper mapper = Mappers.getMapper(AttachedItemMapper.class); @Mock private GrpcObjectMapper grpcObjectMapper; - @BeforeEach - void init() { - when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(AttachedItemTestFactory.createDocumentItem()); + @Nested + class TestMapFromVorgangAttachedItem { + + @BeforeEach + void init() { + when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(AttachedItemTestFactory.createDocumentItem()); + } + + @Test + void shouldMapFromVorgangAttachedItem() { + var grpcVorgangAttachedItem = GrpcVorgangAttachedItemTestFactory.createBuilder().setItemName(DocumentService.DOCUMENT_ITEM_NAME) + .setVersion(AttachedItemTestFactory.VERSION).build(); + + var result = mapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItem); + + assertThat(result).usingRecursiveComparison().isEqualTo(AttachedItemTestFactory.createDocument()); + } } - @Test - void shouldMapFromVorgangAttachedItem() { - var grpcVorgangAttachedItem = GrpcVorgangAttachedItemTestFactory.createBuilder().setItemName(DocumentService.DOCUMENT_ITEM_NAME) - .setVersion(AttachedItemTestFactory.VERSION).build(); + @Nested + class TestToBescheid { + + @Test + void shouldSetBeschiedenAm() { + var bescheid = mapBescheid(); + + assertThat(bescheid.getBeschiedenAm()).isEqualTo(AttachedItemTestFactory.BESCHEIDEN_AM); + } + + @Test + void shouldSetBewilligt() { + var bescheid = mapBescheid(); + + assertThat(bescheid.getBewilligt()).isTrue(); + } + + @Test + void shouldSetBescheidDocument() { + var bescheid = mapBescheid(); + + assertThat(bescheid.getBescheidDocument()).isEqualTo(AttachedItemTestFactory.BESCHEID_DOCUMENT); + } + + @Test + void shouldSetSendBy() { + var bescheid = mapBescheid(); + + assertThat(bescheid.getSendBy()).isEqualTo(AttachedItemTestFactory.SEND_BY.name()); + } + + @Test + void shouldSetNachrichtText() { + var bescheid = mapBescheid(); + + assertThat(bescheid.getNachrichtText()).isEqualTo(AttachedItemTestFactory.NACHRICHT_TEXT); + } + + @Test + void shouldSetNachrichtSubject() { + var bescheid = mapBescheid(); + + assertThat(bescheid.getNachrichtSubject()).isEqualTo(AttachedItemTestFactory.NACHRICHT_SUBJECT); + } + + @Test + void shouldCallToAttachments() { + var expectedAttachments = List.of(AttachedItemTestFactory.ATTACHMENT); + var bescheidItem = AttachedItemTestFactory.createBescheidBuilder() + .item(Map.of(Bescheid.FIELD_ATTACHMENTS, expectedAttachments)).build(); + + mapper.toBescheid(bescheidItem); - var result = mapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItem); + verify(mapper).toAttachments(expectedAttachments); + } - assertThat(result).usingRecursiveComparison().isEqualTo(AttachedItemTestFactory.createDocument()); + @Test + void shouldNotCallToAttachments() { + var bescheidItem = AttachedItemTestFactory.createBescheidBuilder().clearItem().build(); + + mapper.toBescheid(bescheidItem); + + verify(mapper, never()).toAttachments(any()); + } + + @Test + void shouldSetAttachments() { + doReturn(List.of(AttachedItemTestFactory.ATTACHMENT)).when(mapper).toAttachments(any()); + + var bescheid = mapBescheid(); + + assertThat(bescheid.getAttachmentsList()).containsExactly(AttachedItemTestFactory.ATTACHMENT); + } + + @Test + void shouldSetId() { + var bescheid = mapBescheid(); + + assertThat(bescheid.getId()).isEqualTo(AttachedItemTestFactory.ID); + } + + @Test + void shouldSetVersion() { + var bescheid = mapBescheid(); + + assertThat(bescheid.getVersion()).isEqualTo(AttachedItemTestFactory.VERSION); + } + + @Test + void shouldSetStatus() { + var bescheid = mapBescheid(); + + assertThat(bescheid.getStatus()).isEqualTo(Bescheid.Status.DRAFT.name()); + } + + private GrpcBescheid mapBescheid() { + return mapper.toBescheid(AttachedItemTestFactory.createBescheid()); + } } + @Nested + class TestToAttachments { + + @Test + void shouldMapCollection() { + var result = mapper.toAttachments(List.of(AttachedItemTestFactory.ATTACHMENT)); + + assertThat(result).containsExactly(AttachedItemTestFactory.ATTACHMENT); + } + + @Test + void shouldMapSingleValue() { + var result = mapper.toAttachments(AttachedItemTestFactory.ATTACHMENT); + + assertThat(result).containsExactly(AttachedItemTestFactory.ATTACHMENT); + } + + @DisplayName("should return null") + @ParameterizedTest(name = "when attachmentsObject is \"{0}\"") + @NullAndEmptySource + void shouldReturnNull(String attachmentsObject) { + var result = mapper.toAttachments(attachmentsObject); + + assertThat(result).isNull(); + } + } } \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java index abb9739abd06cf487fe5e8d1919eb186f22394ea..fe29f7c3257cb03537de97b1490cc2ec9fd80bc8 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java @@ -48,7 +48,10 @@ import de.ozgcloud.apilib.common.command.OzgCloudCommandService; import de.ozgcloud.apilib.common.command.grpc.CommandMapper; import de.ozgcloud.apilib.common.datatypes.GenericId; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; +import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; +import de.ozgcloud.bescheid.vorgang.VorgangId; +import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandTestFactory; import de.ozgcloud.common.errorhandling.TechnicalException; @@ -79,7 +82,7 @@ class AttachedItemServiceTest { @Test void shouldReturnBescheidItem() { - var expected = BescheidItemTestFactory.create(); + var expected = AttachedItemTestFactory.createBescheid(); when(remoteService.findBescheidDraft(anyString())).thenReturn(Optional.of(expected)); var actual = service.findBescheidItem(CommandTestFactory.VORGANG_ID); @@ -93,17 +96,17 @@ class AttachedItemServiceTest { @Test void shouldCallGetBescheid() { - service.getBescheidItem(BescheidItemTestFactory.ID); + service.getBescheidItem(AttachedItemTestFactory.ID); - verify(remoteService).getBescheid(BescheidItemTestFactory.ID); + verify(remoteService).getBescheid(AttachedItemTestFactory.ID); } @Test void shouldReturnBescheidItem() { - var expected = BescheidItemTestFactory.create(); + var expected = AttachedItemTestFactory.createBescheid(); when(remoteService.getBescheid(anyString())).thenReturn(expected); - var actual = service.getBescheidItem(BescheidItemTestFactory.ID); + var actual = service.getBescheidItem(AttachedItemTestFactory.ID); assertThat(actual).isEqualTo(expected); } @@ -114,14 +117,13 @@ class AttachedItemServiceTest { private static final String CREATED_ATTACHED_ITEM_ID = "attached-item-id"; - private Command command = CommandTestFactory.createBuilder().bodyObject(BescheidItemTestFactory.createBescheidBody()).build(); - private final BescheidItem bescheidItem = BescheidItemTestFactory.create(); + private final AttachedItem bescheidItem = AttachedItemTestFactory.createBescheid(); + private Command command = CommandTestFactory.createBuilder().bodyObject(AttachedItemTestFactory.createBescheidItem()).build(); @Mock private OzgCloudCommand ozgCloudCommand; - @Captor - private ArgumentCaptor<BescheidItem> bescheidItemCaptor; + private ArgumentCaptor<AttachedItem> bescheidItemCaptor; @Test void shouldCallValidateData() { @@ -274,7 +276,7 @@ class AttachedItemServiceTest { @DisplayName(value = "should fail if bescheidAm is missing") @Test void shouldThrowExceptionByBescheidAm() { - Map<String, Object> map = Map.of(BescheidItem.FIELD_BEWILLIGT, true); + Map<String, Object> map = Map.of(Bescheid.FIELD_BEWILLIGT, true); assertThrows(TechnicalException.class, () -> service.validateBescheidData(map)); } @@ -282,7 +284,7 @@ class AttachedItemServiceTest { @DisplayName(value = "should fail if bewilligt is missing") @Test void shouldThrowExceptionByBewilligt() { - Map<String, Object> map = Map.of(BescheidItem.FIELD_BESCHIEDEN_AM, "2021-01-01"); + Map<String, Object> map = Map.of(Bescheid.FIELD_BESCHIEDEN_AM, "2021-01-01"); assertThrows(TechnicalException.class, () -> service.validateBescheidData(map)); } @@ -295,8 +297,8 @@ class AttachedItemServiceTest { @Mock private OzgCloudCommand updateAttachedItemCommand; - private final Command command = CommandTestFactory.createBuilder().relationId(BescheidItemTestFactory.ID).build(); - private final BescheidItem bescheidItem = BescheidItemTestFactory.create(); + private final Command command = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID).build(); + private final AttachedItem bescheidItem = AttachedItemTestFactory.createBescheid(); @BeforeEach void init() { @@ -307,7 +309,7 @@ class AttachedItemServiceTest { void shouldCallGetBescheid() { service.updateBescheidDraft(command); - verify(remoteService).getBescheid(BescheidItemTestFactory.ID); + verify(remoteService).getBescheid(AttachedItemTestFactory.ID); } @Test @@ -365,27 +367,27 @@ class AttachedItemServiceTest { @Nested class TestBuildAttachedItemAsMap { - private final Command command = CommandTestFactory.createBuilder().bodyObject(BescheidItemTestFactory.createBescheidBody()).build(); + private final Command command = CommandTestFactory.createBuilder().bodyObject(AttachedItemTestFactory.createBescheidItem()).build(); @Test void shouldSetVorgangId() { var map = service.buildAttachedItemAsMap(command, Map.of()); - assertThat(map).containsEntry(BescheidItem.PROPERTY_VORGANG_ID, command.getVorgangId()); + assertThat(map).containsEntry(AttachedItem.PROPERTY_VORGANG_ID, command.getVorgangId()); } @Test void shouldSetClient() { var map = service.buildAttachedItemAsMap(command, Map.of()); - assertThat(map).containsEntry(BescheidItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); + assertThat(map).containsEntry(AttachedItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); } @Test void shouldSetItemName() { var map = service.buildAttachedItemAsMap(command, Map.of()); - assertThat(map).containsEntry(BescheidItem.PROPERTY_ITEM_NAME, AttachedItemService.BESCHEID_ITEM_NAME); + assertThat(map).containsEntry(AttachedItem.PROPERTY_ITEM_NAME, AttachedItemService.BESCHEID_ITEM_NAME); } @Test @@ -394,7 +396,7 @@ class AttachedItemServiceTest { var map = service.buildAttachedItemAsMap(command, expectedMap); - assertThat(map).containsEntry(BescheidItem.PROPERTY_ITEM, expectedMap); + assertThat(map).containsEntry(AttachedItem.PROPERTY_ITEM, expectedMap); } } @@ -405,7 +407,7 @@ class AttachedItemServiceTest { @Mock private OzgCloudCommand updateItemCommand; - private final Command command = CommandTestFactory.createBuilder().bodyObject(BescheidItemTestFactory.createBescheidBody()).build(); + private final Command command = CommandTestFactory.createBuilder().bodyObject(AttachedItemTestFactory.createBescheidItem()).build(); @BeforeEach void init() { @@ -415,7 +417,7 @@ class AttachedItemServiceTest { @Test void shouldCallBuildItemMapWithAllBescheidFields() { - service.overrideAttachedItem(BescheidItemTestFactory.create(), command); + service.overrideAttachedItem(AttachedItemTestFactory.createBescheid(), command); verify(service).buildItemMapWithAllBescheidFields(command); } @@ -425,7 +427,7 @@ class AttachedItemServiceTest { var itemMap = Map.of("key", (Object) "value"); doReturn(itemMap).when(service).buildItemMapWithAllBescheidFields(any()); - service.overrideAttachedItem(BescheidItemTestFactory.create(), command); + service.overrideAttachedItem(AttachedItemTestFactory.createBescheid(), command); verify(service).buildAttachedItemAsMap(command, itemMap); } @@ -434,7 +436,7 @@ class AttachedItemServiceTest { void shouldCallBuildUpdateAttachedItemCommand() { var bodyObject = Map.of("key", (Object) "value"); doReturn(bodyObject).when(service).buildAttachedItemAsMap(any(), any()); - var bescheidItem = BescheidItemTestFactory.create(); + var bescheidItem = AttachedItemTestFactory.createBescheid(); service.overrideAttachedItem(bescheidItem, command); @@ -445,14 +447,14 @@ class AttachedItemServiceTest { void shouldCallCommandService() { doReturn(updateItemCommand).when(service).buildUpdateAttachedItemCommand(any(), any()); - service.overrideAttachedItem(BescheidItemTestFactory.create(), command); + service.overrideAttachedItem(AttachedItemTestFactory.createBescheid(), command); verify(commandService).createAndWaitUntilDone(updateItemCommand); } @Test void shouldReturnCreatedResource() { - var result = service.overrideAttachedItem(BescheidItemTestFactory.create(), command); + var result = service.overrideAttachedItem(AttachedItemTestFactory.createBescheid(), command); assertThat(result).isEqualTo(CREATED_RESOURCE); } @@ -499,62 +501,62 @@ class AttachedItemServiceTest { @Nested class TestBuildBescheidMap { - private final Command command = CommandTestFactory.createBuilder().bodyObject(BescheidItemTestFactory.createBescheidBody()).build(); + private final Command command = CommandTestFactory.createBuilder().bodyObject(AttachedItemTestFactory.createBescheidItem()).build(); @Test void shouldSetStatus() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT.name()); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name()); } @Test void shouldSetBeschiedenAm() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_BESCHIEDEN_AM, BescheidItemTestFactory.BESCHEIDEN_AM); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_BESCHIEDEN_AM, AttachedItemTestFactory.BESCHEIDEN_AM); } @Test void shouldSetBewilligt() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_BEWILLIGT, true); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_BEWILLIGT, true); } @Test void shouldSetBescheidDocument() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_BESCHEID_DOCUMENT, BescheidItemTestFactory.BESCHEID_DOCUMENT); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_BESCHEID_DOCUMENT, AttachedItemTestFactory.BESCHEID_DOCUMENT); } @Test void shouldSetSendBy() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_SEND_BY, BescheidItemTestFactory.SEND_BY); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_SEND_BY, AttachedItemTestFactory.SEND_BY.name()); } @Test void shouldSetNachrichtText() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_NACHRICHT_TEXT, BescheidItemTestFactory.NACHRICHT_TEXT); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_NACHRICHT_TEXT, AttachedItemTestFactory.NACHRICHT_TEXT); } @Test void shouldSetNachrichtSubject() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_NACHRICHT_SUBJECT, BescheidItemTestFactory.NACHRICHT_SUBJECT); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_NACHRICHT_SUBJECT, AttachedItemTestFactory.NACHRICHT_SUBJECT); } @Test void shouldSetAttachments() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_ATTACHMENTS, List.of(BescheidItemTestFactory.ATTACHMENT)); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_ATTACHMENTS, List.of(AttachedItemTestFactory.ATTACHMENT)); } } @@ -563,7 +565,7 @@ class AttachedItemServiceTest { @Test void shouldCallVorgangIdMapper() { - service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of()); + service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of()); verify(commandMapper).toOzgCloudVorgangId(CommandTestFactory.VORGANG_ID); } @@ -573,16 +575,16 @@ class AttachedItemServiceTest { var expectedVorgangId = OzgCloudVorgangId.from(CommandTestFactory.VORGANG_ID); when(commandMapper.toOzgCloudVorgangId(any())).thenReturn(expectedVorgangId); - var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of()); + var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of()); assertThat(result.getVorgangId()).isEqualTo(expectedVorgangId); } @Test void shouldCallRelationIdMapper() { - service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of()); + service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of()); - verify(commandMapper).mapRelationId(BescheidItemTestFactory.ID); + verify(commandMapper).mapRelationId(AttachedItemTestFactory.ID); } @Test @@ -590,21 +592,21 @@ class AttachedItemServiceTest { var expectedId = GenericId.from("relationId"); when(commandMapper.mapRelationId(any())).thenReturn(expectedId); - var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of()); + var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of()); assertThat(result.getRelationId()).isEqualTo(expectedId); } @Test void shouldSetRelationVersion() { - var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of()); + var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of()); - assertThat(result.getRelationVersion()).isEqualTo(BescheidItemTestFactory.VERSION); + assertThat(result.getRelationVersion()).isEqualTo(AttachedItemTestFactory.VERSION); } @Test void shouldSetOrder() { - var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of()); + var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of()); assertThat(result.getOrder()).isEqualTo(AttachedItemService.UPDATE_ATTACHED_ITEM_ORDER); } @@ -613,7 +615,7 @@ class AttachedItemServiceTest { void shouldSetBodyObject() { var bodyObject = Map.of("key", (Object) "value"); - var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), bodyObject); + var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), bodyObject); assertThat(result.getBodyObject()).containsAllEntriesOf(bodyObject); } @@ -626,21 +628,21 @@ class AttachedItemServiceTest { @Mock private OzgCloudCommand deleteItemOzgCloudCommand; - private final Command command = CommandTestFactory.createBuilder().relationId(BescheidItemTestFactory.ID).build(); + private final Command command = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID).build(); @Test void shouldCallGetBescheid() { - when(remoteService.getBescheid(any())).thenReturn(BescheidItemTestFactory.create()); + when(remoteService.getBescheid(any())).thenReturn(AttachedItemTestFactory.createBescheid()); deleteBescheidDraft(); - verify(remoteService).getBescheid(BescheidItemTestFactory.ID); + verify(remoteService).getBescheid(AttachedItemTestFactory.ID); } @Test void shouldCallCommandService() { doReturn(deleteItemOzgCloudCommand).when(service).buildDeleteItemCommand(any(), any()); - when(remoteService.getBescheid(any())).thenReturn(BescheidItemTestFactory.create()); + when(remoteService.getBescheid(any())).thenReturn(AttachedItemTestFactory.createBescheid()); deleteBescheidDraft(); @@ -663,7 +665,7 @@ class AttachedItemServiceTest { @Test void shouldCallCommandMapperWithVorgangId() { - service.buildDeleteItemCommand(command, BescheidItemTestFactory.create()); + service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid()); verify(commandMapper).toOzgCloudVorgangId(CommandTestFactory.VORGANG_ID); } @@ -673,38 +675,38 @@ class AttachedItemServiceTest { var expectedVorgangId = OzgCloudVorgangId.from(CommandTestFactory.VORGANG_ID); when(commandMapper.toOzgCloudVorgangId(any())).thenReturn(expectedVorgangId); - var ozgCloudCommand = service.buildDeleteItemCommand(command, BescheidItemTestFactory.create()); + var ozgCloudCommand = service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid()); assertThat(ozgCloudCommand.getVorgangId()).isEqualTo(expectedVorgangId); } @Test void shouldCallCommandMapperWithRelationId() { - service.buildDeleteItemCommand(command, BescheidItemTestFactory.create()); + service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid()); - verify(commandMapper).mapRelationId(BescheidItemTestFactory.ID); + verify(commandMapper).mapRelationId(AttachedItemTestFactory.ID); } @Test void shouldSetRelationId() { - var expectedId = GenericId.from(BescheidItemTestFactory.ID); + var expectedId = GenericId.from(AttachedItemTestFactory.ID); when(commandMapper.mapRelationId(any())).thenReturn(expectedId); - var ozgCloudCommand = service.buildDeleteItemCommand(command, BescheidItemTestFactory.create()); + var ozgCloudCommand = service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid()); assertThat(ozgCloudCommand.getRelationId()).isEqualTo(expectedId); } @Test void shouldSetRelationVersion() { - var ozgCloudCommand = service.buildDeleteItemCommand(command, BescheidItemTestFactory.create()); + var ozgCloudCommand = service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid()); - assertThat(ozgCloudCommand.getRelationVersion()).isEqualTo(BescheidItemTestFactory.VERSION); + assertThat(ozgCloudCommand.getRelationVersion()).isEqualTo(AttachedItemTestFactory.VERSION); } @Test void shouldSetOrder() { - var ozgCloudCommand = service.buildDeleteItemCommand(command, BescheidItemTestFactory.create()); + var ozgCloudCommand = service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid()); assertThat(ozgCloudCommand.getOrder()).isEqualTo(AttachedItemService.DELETE_ATTACHED_ITEM); } @@ -716,12 +718,13 @@ class AttachedItemServiceTest { @Test void shouldFilterDraftStatus() { - assertDoesNotThrow(() -> service.validateBescheidStatus(BescheidItemTestFactory.create())); + assertDoesNotThrow(() -> service.validateBescheidStatus(AttachedItemTestFactory.createBescheid())); } @Test void shouldThrowExceptionIfBescheidIsNotDraft() { - var bescheidItem = BescheidItemTestFactory.createBuilder().bescheidData(Map.of(BescheidItem.FIELD_STATUS, "otherStatus")).build(); + var bescheidItem = + AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_STATUS, "otherStatus").build(); assertThrows(TechnicalException.class, () -> service.validateBescheidStatus(bescheidItem)); } @@ -733,9 +736,9 @@ class AttachedItemServiceTest { @Test void shouldCallRemoteService() { - service.getItem(BescheidItemTestFactory.ID); + service.getItem(AttachedItemTestFactory.ID); - verify(service).getItem(BescheidItemTestFactory.ID); + verify(service).getItem(AttachedItemTestFactory.ID); } @Test @@ -743,7 +746,7 @@ class AttachedItemServiceTest { var expectedItem = AttachedItemTestFactory.createDocument(); doReturn(expectedItem).when(remoteService).getItem(any()); - var result = service.getItem(BescheidItemTestFactory.ID); + var result = service.getItem(AttachedItemTestFactory.ID); assertThat(result).isEqualTo(expectedItem); } @@ -757,46 +760,31 @@ class AttachedItemServiceTest { @Test void shouldCallBuildPatchBescheidCommand() { - var item = AttachedItemTestFactory.createDocument(); + setBescheidStatus(); - service.patch(item); - - verify(service).buildPatchBescheidCommand(item); + verify(service).buildPatchBescheidCommand(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.DRAFT); } @Test void shouldCallCommandService() { - doReturn(command).when(service).buildPatchBescheidCommand(any()); + doReturn(command).when(service).buildPatchBescheidCommand(any(), anyLong(), any()); - service.patch(AttachedItemTestFactory.createDocument()); + setBescheidStatus(); verify(commandService).createAndWaitUntilDone(command); } + + private void setBescheidStatus() { + service.setBescheidStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.DRAFT); + } } @Nested class TestBuildPatchBescheidCommand { - @Test - void shouldCallVorgangIdMapper() { - service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); - - verify(commandMapper).toOzgCloudVorgangId(CommandTestFactory.VORGANG_ID); - } - - @Test - void shouldSetVorgangId() { - var expectedVorgangId = OzgCloudVorgangId.from(CommandTestFactory.VORGANG_ID); - when(commandMapper.toOzgCloudVorgangId(any())).thenReturn(expectedVorgangId); - - var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); - - assertThat(result.getVorgangId()).isEqualTo(expectedVorgangId); - } - @Test void shouldCallRelationIdMapper() { - service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); + buildPatchBescheidCommand(); verify(commandMapper).mapRelationId(AttachedItemTestFactory.ID); } @@ -806,92 +794,83 @@ class AttachedItemServiceTest { var expectedId = GenericId.from(AttachedItemTestFactory.ID); when(commandMapper.mapRelationId(any())).thenReturn(expectedId); - var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); + var result = buildPatchBescheidCommand(); assertThat(result.getRelationId()).isEqualTo(expectedId); } @Test void shouldSetRelationVersion() { - var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); + var result = buildPatchBescheidCommand(); assertThat(result.getRelationVersion()).isEqualTo(AttachedItemTestFactory.VERSION); } @Test void shouldSetOrder() { - var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); + var result = buildPatchBescheidCommand(); assertThat(result.getOrder()).isEqualTo(AttachedItemService.PATCH_ATTACHED_ITEM); } @Test void shouldCallBuildObjectMap() { - var bescheidItem = AttachedItemTestFactory.createDocument(); + var result = buildPatchBescheidCommand(); - service.buildPatchBescheidCommand(bescheidItem); - - verify(service).buildObjectMap(bescheidItem); + verify(service).buildObjectMap(AttachedItemTestFactory.ID, Bescheid.Status.DRAFT); } @Test void shouldSetBodyObject() { - var expectedMap = Map.of("key", (Object) "value"); - doReturn(expectedMap).when(service).buildObjectMap(any()); + var bodyObject = Map.of("key", (Object) "value"); + doReturn(bodyObject).when(service).buildObjectMap(any(), any()); - var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); + var result = buildPatchBescheidCommand(); + + assertThat(result.getBodyObject()).isSameAs(bodyObject); + } - assertThat(result.getBodyObject()).containsAllEntriesOf(expectedMap); + private OzgCloudCommand buildPatchBescheidCommand() { + return service.buildPatchBescheidCommand(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.DRAFT); } } @Nested - class TestBuildBodyObject { + class TestBuildObjectMap { @Test - void shouldSetId() { - var result = buildObjectMap(); + void shouldSetBescheidId() { + var result = service.buildObjectMap(AttachedItemTestFactory.ID, Bescheid.Status.DRAFT); assertThat(result).containsEntry(AttachedItem.PROPERTY_ID, AttachedItemTestFactory.ID); } @Test - void shouldSetClient() { - var result = buildObjectMap(); - - assertThat(result).containsEntry(AttachedItem.PROPERTY_CLIENT, AttachedItemTestFactory.CLIENT); - } - - @Test - void shouldSetVorgangId() { - var result = buildObjectMap(); + void shouldSetBescheidStatus() { + var result = service.buildObjectMap(AttachedItemTestFactory.ID, Bescheid.Status.DRAFT); - assertThat(result).containsEntry(AttachedItem.PROPERTY_VORGANG_ID, CommandTestFactory.VORGANG_ID); + assertThat(result).extracting(AttachedItem.PROPERTY_ITEM, MAP).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name()); } + } - @Test - void shouldSetItemName() { - var result = buildObjectMap(); - - assertThat(result).containsEntry(AttachedItem.PROPERTY_ITEM_NAME, AttachedItemService.BESCHEID_ITEM_NAME); - } + @Nested + class TestFindAllBescheid { @Test - void shouldSetVersion() { - var result = buildObjectMap(); + void shouldCallRemoteService() { + service.findAllBescheid(VorgangTestFactory.ID); - assertThat(result).containsEntry(AttachedItem.PROPERTY_VERSION, AttachedItemTestFactory.VERSION); + verify(remoteService).findAllBescheid(VorgangTestFactory.ID); } @Test - void shouldSetItem() { - var result = buildObjectMap(); + void shouldReturnResult() { + var expectedBescheidItem = AttachedItemTestFactory.createBescheid(); + when(remoteService.findAllBescheid(any(VorgangId.class))).thenReturn(Collections.singletonList(expectedBescheidItem)); - assertThat(result).containsEntry(AttachedItem.PROPERTY_ITEM, AttachedItemTestFactory.createBescheidItem()); - } + var result = service.findAllBescheid(VorgangTestFactory.ID); - private Map<String, Object> buildObjectMap() { - return service.buildObjectMap(AttachedItemTestFactory.createBescheid()); + assertThat(result).containsExactly(expectedBescheidItem); } } } \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapperTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapperTest.java deleted file mode 100644 index 027085c7c1c70681debd0503f3e1920c5620a039..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapperTest.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.bescheid.attacheditem; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.command.CommandTestFactory; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; - -class BescheidItemMapperTest { - - @Spy - @InjectMocks - private BescheidItemMapper mapper; - - @Mock - private GrpcObjectMapper grpcObjectMapper; - - @Nested - class TestFromFindVorgangAttachedItemResponse { - - GrpcFindVorgangAttachedItemResponse grpcResponse = GrpcFindVorgangAttachedItemResponseTestFactory.create(); - - @Test - void shouldCallMapFromVorgangAttachedItem() { - mapper.fromFindVorgangAttachedItemResponse(grpcResponse).toList(); - - verify(mapper).mapFromVorgangAttachedItem(grpcResponse.getVorgangAttachedItems(0)); - } - - @Test - void shouldReturnBescheidITem() { - var bescheid = BescheidItemTestFactory.create(); - doReturn(bescheid).when(mapper).mapFromVorgangAttachedItem(any()); - - var result = mapper.fromFindVorgangAttachedItemResponse(grpcResponse).toList(); - - assertThat(result).first().isEqualTo(bescheid); - } - } - - @Nested - class TestMapFromVorgangAttachedItem { - - @Test - void shouldSetId() { - var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()); - - assertThat(result.getId()).isEqualTo(BescheidItemTestFactory.ID); - } - - @Test - void shouldSetVersion() { - var grpcAttachedItem = GrpcVorgangAttachedItemTestFactory.createBuilder().setVersion(BescheidItemTestFactory.VERSION).build(); - - var result = mapper.mapFromVorgangAttachedItem(grpcAttachedItem); - - assertThat(result.getVersion()).isEqualTo(BescheidItemTestFactory.VERSION); - } - - @Test - void shouldSetClient() { - var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()); - - assertThat(result.getClient()).isEqualTo(BescheidItemTestFactory.CLIENT); - } - - @Test - void shouldSetVorgangId() { - var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()); - - assertThat(result.getVorgangId()).isEqualTo(CommandTestFactory.VORGANG_ID); - } - - @Test - void shouldSetItemName() { - var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()); - - assertThat(result.getItemName()).isEqualTo(AttachedItemService.BESCHEID_ITEM_NAME); - } - - @Test - void shouldCallGrpcObjectMapper() { - var grpcAttachedItem = GrpcVorgangAttachedItemTestFactory.create(); - - mapper.mapFromVorgangAttachedItem(grpcAttachedItem); - - verify(grpcObjectMapper).mapFromGrpc(grpcAttachedItem.getItem()); - } - - @Test - void shouldSetBescheidData() { - var bescheidData = BescheidItemTestFactory.createBescheidBody(); - when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(bescheidData); - - var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()); - - assertThat(result.getBescheidData()).isEqualTo(bescheidData); - } - } - - @Nested - class TestToBescheid { - - @Test - void shouldSetBeschiedenAm() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getBeschiedenAm()).isEqualTo(BescheidItemTestFactory.BESCHEIDEN_AM); - } - - @Test - void shouldSetBewilligt() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getBewilligt()).isTrue(); - } - - @Test - void shouldSetBescheidDocument() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getBescheidDocument()).isEqualTo(BescheidItemTestFactory.BESCHEID_DOCUMENT); - } - - @Test - void shouldSetSendBy() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getSendBy()).isEqualTo(BescheidItemTestFactory.SEND_BY); - } - - @Test - void shouldSetNachrichtText() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getNachrichtText()).isEqualTo(BescheidItemTestFactory.NACHRICHT_TEXT); - } - - @Test - void shouldSetNachrichtSubject() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getNachrichtSubject()).isEqualTo(BescheidItemTestFactory.NACHRICHT_SUBJECT); - } - - @Test - void shouldCallToAttachments() { - var expectedAttachments = List.of(BescheidItemTestFactory.ATTACHMENT); - var bescheidItem = BescheidItemTestFactory.createBuilder() - .bescheidData(Map.of(BescheidItem.FIELD_ATTACHMENTS, expectedAttachments)).build(); - - mapper.toBescheid(bescheidItem); - - verify(mapper).toAttachments(expectedAttachments); - } - - @Test - void shouldNotCallToAttachments() { - var bescheidItem = BescheidItemTestFactory.createBuilder().bescheidData(Map.of()).build(); - - mapper.toBescheid(bescheidItem); - - verify(mapper, never()).toAttachments(any()); - } - - @Test - void shouldSetAttachments() { - doReturn(List.of(BescheidItemTestFactory.ATTACHMENT)).when(mapper).toAttachments(any()); - - var bescheid = mapBescheid(); - - assertThat(bescheid.getAttachmentsList()).containsExactly(BescheidItemTestFactory.ATTACHMENT); - } - - @Test - void shouldSetId() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getId()).isEqualTo(BescheidItemTestFactory.ID); - } - - @Test - void shouldSetVersion() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getVersion()).isEqualTo(BescheidItemTestFactory.VERSION); - } - - private GrpcBescheid mapBescheid() { - return mapper.toBescheid(BescheidItemTestFactory.create()); - } - } - - @Nested - class TestToAttachments { - - @Test - void shouldMapCollection() { - var result = mapper.toAttachments(List.of(BescheidItemTestFactory.ATTACHMENT)); - - assertThat(result).containsExactly(BescheidItemTestFactory.ATTACHMENT); - } - - @Test - void shouldMapSingleValue() { - var result = mapper.toAttachments(BescheidItemTestFactory.ATTACHMENT); - - assertThat(result).containsExactly(BescheidItemTestFactory.ATTACHMENT); - } - - @DisplayName("should return null") - @ParameterizedTest(name = "when attachmentsObject is \"{0}\"") - @NullAndEmptySource - void shouldReturnNull(String attachmentsObject) { - var result = mapper.toAttachments(attachmentsObject); - - assertThat(result).isNull(); - } - } -} \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemTestFactory.java deleted file mode 100644 index 1299edf5394b1d9a8ec0d804663dbd450b3d741c..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemTestFactory.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.bescheid.attacheditem; - -import java.util.List; -import java.util.Map; - -import de.ozgcloud.bescheid.attacheditem.BescheidItem.BescheidItemBuilder; -import de.ozgcloud.command.CommandTestFactory; - -public class BescheidItemTestFactory { - - public static final String ID = "bescheid-item-id"; - public static final long VERSION = 10L; - public static final String CLIENT = "client"; - - public static final String BESCHEIDEN_AM = "2024-01-01"; - public static final String BESCHEID_DOCUMENT = "bescheid-document"; - public static final String ATTACHMENT = "attachment-id"; - public static final String SEND_BY = "POSTFACH"; - public static final String NACHRICHT_TEXT = "nachricht-text"; - public static final String NACHRICHT_SUBJECT = "nachricht-subject"; - - public static BescheidItem create() { - return createBuilder().build(); - } - - public static BescheidItemBuilder createBuilder() { - return BescheidItem.builder() - .id(ID) - .version(VERSION) - .client(CLIENT) - .vorgangId(CommandTestFactory.VORGANG_ID) - .itemName(AttachedItemService.BESCHEID_ITEM_NAME) - .bescheidData(createBescheidBody()); - } - - public static Map<String, Object> createBescheidBody() { - return Map.of( - BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT, - BescheidItem.FIELD_BESCHIEDEN_AM, BESCHEIDEN_AM, - BescheidItem.FIELD_BEWILLIGT, true, - BescheidItem.FIELD_BESCHEID_DOCUMENT, BESCHEID_DOCUMENT, - BescheidItem.FIELD_ATTACHMENTS, List.of(ATTACHMENT), - BescheidItem.FIELD_SEND_BY, SEND_BY, - BescheidItem.FIELD_NACHRICHT_TEXT, NACHRICHT_TEXT, - BescheidItem.FIELD_NACHRICHT_SUBJECT, NACHRICHT_SUBJECT); - } -} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/GrpcVorgangAttachedItemTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/GrpcVorgangAttachedItemTestFactory.java index 85515f502425418404afb44e84fd6ed10473f921..fa3431732af5d052b593ed5b8827d0565741f44c 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/GrpcVorgangAttachedItemTestFactory.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/GrpcVorgangAttachedItemTestFactory.java @@ -41,9 +41,9 @@ public class GrpcVorgangAttachedItemTestFactory { static GrpcVorgangAttachedItem.Builder createBuilder() { return GrpcVorgangAttachedItem.newBuilder() - .setId(BescheidItemTestFactory.ID) + .setId(AttachedItemTestFactory.ID) .setVorgangId(CommandTestFactory.VORGANG_ID) - .setClient(BescheidItemTestFactory.CLIENT) + .setClient(AttachedItemTestFactory.CLIENT) .setItemName(AttachedItemService.BESCHEID_ITEM_NAME) .setItem(OBJECT); } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/UtilsTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/UtilsTest.java index 9809590526f543c40d3efa67b4b09908d2b7f478..c6ba16773eaf8c543412d378709d506d7996cd3a 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/UtilsTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/UtilsTest.java @@ -35,11 +35,10 @@ class UtilsTest { @Test void shouldReturnClient() { - var command = CommandTestFactory.createBuilder().bodyObject(Map.of(BescheidItem.PROPERTY_CLIENT, BescheidItemTestFactory.CLIENT)) - .build(); + var command = CommandTestFactory.createBuilder().bodyObject(Map.of(AttachedItem.PROPERTY_CLIENT, AttachedItemTestFactory.CLIENT)).build(); var client = Utils.extractClient(command); - assertThat(client).isEqualTo(BescheidItemTestFactory.CLIENT); + assertThat(client).isEqualTo(AttachedItemTestFactory.CLIENT); } } \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java index 444249e06cc391cd8b6d05304ab33f93134cb899..11779af655705946b71d382902ce71b3c97118e6 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java @@ -28,11 +28,11 @@ package de.ozgcloud.bescheid.attacheditem; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; -import java.util.Map; +import java.util.Collections; +import java.util.List; import java.util.Optional; import java.util.stream.Stream; -import org.apache.commons.collections.MapUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -41,8 +41,12 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; +import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; import de.ozgcloud.command.CommandTestFactory; +import de.ozgcloud.vorgang.common.GrpcObject; +import de.ozgcloud.vorgang.common.GrpcProperty; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; @@ -64,8 +68,6 @@ class VorgangAttachedItemRemoteServiceTest { @Mock private ClientInterceptor bescheidCallContextInterceptor; @Mock - private BescheidItemMapper bescheidItemMapper; - @Mock private AttachedItemMapper attachedItemMapper; @Nested @@ -74,15 +76,18 @@ class VorgangAttachedItemRemoteServiceTest { @Mock private GrpcFindVorgangAttachedItemRequest request; - @BeforeEach - void init() { - doReturn(serviceStub).when(service).getServiceStub(); - } - @Nested @DisplayName("by vorgangId") class TestGetByVorgangId { + private static final AttachedItem BESCHEID_ITEM = AttachedItemTestFactory.createBescheid(); + + @BeforeEach + void init() { + doReturn(request).when(service).buildFindRequest(any()); + doReturn(Optional.of(BESCHEID_ITEM)).when(service).findBescheidDraft(any(GrpcFindVorgangAttachedItemRequest.class)); + } + @Test void shouldCallCreateFindRequestBuilder() { service.findBescheidDraft(VORGANG_ID); @@ -92,68 +97,63 @@ class VorgangAttachedItemRemoteServiceTest { @Test void shouldCallGetBescheidDraft() { - doReturn(request).when(service).buildFindRequest(any()); - service.findBescheidDraft(VORGANG_ID); verify(service).findBescheidDraft(request); } + + @Test + void shouldReturnResult() { + var result = service.findBescheidDraft(VORGANG_ID); + + assertThat(result).contains(BESCHEID_ITEM); + } } @Nested @DisplayName("by grpc request") class TestByGrpcRequest { + private static final AttachedItem BESCHEID_ITEM = AttachedItemTestFactory.createBescheid(); + @Mock private GrpcFindVorgangAttachedItemResponse response; - @Test - void shouldCallGetServiceStub() { - service.findBescheidDraft(request); - - verify(service).getServiceStub(); + @BeforeEach + void init() { } @Test - void shouldCallFind() { - service.findBescheidDraft(request); - - verify(serviceStub).find(request); - } - - @Test - void shouldCallMapper() { - when(serviceStub.find(any())).thenReturn(response); + void shouldCallFindAllBescheid() { + doReturn(Stream.of(BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class)); service.findBescheidDraft(request); - verify(bescheidItemMapper).fromFindVorgangAttachedItemResponse(response); + verify(service).findAllBescheid(request); } @Test void shouldCallHasStatusDraft() { - var item = BescheidItemTestFactory.create(); - when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.of(item)); + doReturn(Stream.of(BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class)); service.findBescheidDraft(request); - verify(service).hasStatusDraft(item); + verify(service).hasStatusDraft(BESCHEID_ITEM); } @Test void shouldFilterDraftItems() { - var item = BescheidItemTestFactory.create(); - when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.of(item)); + doReturn(Stream.of(BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class)); doReturn(true).when(service).hasStatusDraft(any()); var result = service.findBescheidDraft(request); - assertThat(result).contains(item); + assertThat(result).contains(BESCHEID_ITEM); } @Test void shouldReturnEmptyWhenNotFound() { - when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.empty()); + doReturn(Stream.empty()).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class)); var result = service.findBescheidDraft(request); @@ -162,7 +162,7 @@ class VorgangAttachedItemRemoteServiceTest { @Test void shouldReturnEmptyWhenNotDraft() { - when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.of(BescheidItemTestFactory.create())); + doReturn(Stream.of(BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class)); doReturn(false).when(service).hasStatusDraft(any()); var result = service.findBescheidDraft(request); @@ -170,25 +170,45 @@ class VorgangAttachedItemRemoteServiceTest { assertThat(result).isEmpty(); } - @Test - void shouldReturnLastBescheid() { - var item1 = BescheidItemTestFactory.createBuilder().bescheidData(Map.of( - BescheidItem.FIELD_BESCHIEDEN_AM, "2021-01-01")).build(); - var item2 = BescheidItemTestFactory.create(); - when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.of(item1, item2)); - doReturn(true).when(service).hasStatusDraft(any()); + } - var result = service.findBescheidDraft(request); + } - assertThat(getBeschiedenAm(result)).isEqualTo(BescheidItemTestFactory.BESCHEIDEN_AM); - } + @Nested + class TestFindAllBescheid { - private String getBeschiedenAm(Optional<BescheidItem> item) { - assertThat(item).isPresent(); - return MapUtils.getString(item.get().getBescheidData(), BescheidItem.FIELD_BESCHIEDEN_AM); - } + private static final AttachedItem RESULT_BESCHEID_ITEM = AttachedItemTestFactory.createBescheid(); + + @Mock + private GrpcFindVorgangAttachedItemRequest request; + + @BeforeEach + void init() { + doReturn(Stream.of(RESULT_BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class)); + } + + @Test + void shouldCallBuildFindRequest() { + service.findAllBescheid(VorgangTestFactory.ID); + + verify(service).buildFindRequest(VorgangTestFactory.ID.toString()); + } + + @Test + void shouldCallFindAllBescheid() { + doReturn(request).when(service).buildFindRequest(any()); + + service.findAllBescheid(VorgangTestFactory.ID); + + verify(service).findAllBescheid(request); } + @Test + void shouldReturnResult() { + var result = service.findAllBescheid(VorgangTestFactory.ID); + + assertThat(result).containsExactly(RESULT_BESCHEID_ITEM); + } } @Nested @@ -220,12 +240,75 @@ class VorgangAttachedItemRemoteServiceTest { } } + @Nested + class TestFindAllBescheidWithGrpcRequest { + + @Mock + private GrpcFindVorgangAttachedItemRequest request; + @Mock + private GrpcFindVorgangAttachedItemResponse response; + @Mock + private GrpcVorgangAttachedItem grpcVorgangAttachedItem; + + @BeforeEach + void init() { + doReturn(serviceStub).when(service).getServiceStub(); + when(serviceStub.find(any())).thenReturn(response); + } + + @Test + void shouldCallGetServiceStub() { + service.findAllBescheid(request); + + verify(service).getServiceStub(); + } + + @Test + void shouldCallMapper() { + when(response.getVorgangAttachedItemsList()).thenReturn(Collections.singletonList(grpcVorgangAttachedItem)); + + service.findAllBescheid(request).toList(); + + verify(attachedItemMapper).mapFromVorgangAttachedItem(grpcVorgangAttachedItem); + } + + @Test + void shouldReturnSortedResult() { + var beschiedenAmFirst = "2021-01-01"; + var beschiedenAmLast = "2024-01-01"; + createItems(beschiedenAmFirst, beschiedenAmLast); + + var result = service.findAllBescheid(request).toList(); + + assertThat(result).hasSize(2); + assertThat(result.get(0).getItem()).containsEntry(Bescheid.FIELD_BESCHIEDEN_AM, beschiedenAmLast); + assertThat(result.get(1).getItem()).containsEntry(Bescheid.FIELD_BESCHIEDEN_AM, beschiedenAmFirst); + } + + private void createItems(String beschiedenAmFirst, String beschiedenAmLast) { + var itemBeschiedenFirst = createGrpcAttachedItem(beschiedenAmLast); + when(attachedItemMapper.mapFromVorgangAttachedItem(itemBeschiedenFirst)).thenReturn(createAttachedItem(beschiedenAmLast)); + var itemBeschiedenLast = createGrpcAttachedItem(beschiedenAmFirst); + when(attachedItemMapper.mapFromVorgangAttachedItem(itemBeschiedenLast)).thenReturn(createAttachedItem(beschiedenAmFirst)); + when(response.getVorgangAttachedItemsList()).thenReturn(List.of(itemBeschiedenFirst, itemBeschiedenLast)); + } + + private GrpcVorgangAttachedItem createGrpcAttachedItem(String beschiedenAm) { + return GrpcVorgangAttachedItemTestFactory.createBuilder().clearItem().setItem(GrpcObject.newBuilder().addProperty( + GrpcProperty.newBuilder().setName(Bescheid.FIELD_BESCHIEDEN_AM).addValue(beschiedenAm))).build(); + } + + private AttachedItem createAttachedItem(String beschiedenAm) { + return AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_BESCHIEDEN_AM, beschiedenAm).build(); + } + } + @Nested class TestHasStatusDraft { @Test void shouldReturnTrueIfDraft() { - var item = BescheidItemTestFactory.createBuilder().bescheidData(Map.of(BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT.name())) + var item = AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name()) .build(); var result = service.hasStatusDraft(item); @@ -235,7 +318,7 @@ class VorgangAttachedItemRemoteServiceTest { @Test void shouldReturnFalseIfNotDraft() { - var item = BescheidItemTestFactory.createBuilder().bescheidData(Map.of(BescheidItem.FIELD_STATUS, BescheidItem.Status.BESCHEID.name())) + var item = AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name()) .build(); var result = service.hasStatusDraft(item); @@ -275,7 +358,7 @@ class VorgangAttachedItemRemoteServiceTest { getBescheid(); - verify(service).buildGetByIdRequest(BescheidItemTestFactory.ID); + verify(service).buildGetByIdRequest(AttachedItemTestFactory.ID); } @Test @@ -294,13 +377,13 @@ class VorgangAttachedItemRemoteServiceTest { getBescheid(); - verify(bescheidItemMapper).mapFromVorgangAttachedItem(grpcVorgangAttachedItem); + verify(attachedItemMapper).mapFromVorgangAttachedItem(grpcVorgangAttachedItem); } @Test void shouldReturnFoundBescheid() { - var expectedBescheid = BescheidItemTestFactory.create(); - when(bescheidItemMapper.mapFromVorgangAttachedItem(any())).thenReturn(expectedBescheid); + var expectedBescheid = AttachedItemTestFactory.createBescheid(); + when(attachedItemMapper.mapFromVorgangAttachedItem(any())).thenReturn(expectedBescheid); when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem); var result = getBescheid(); @@ -308,8 +391,8 @@ class VorgangAttachedItemRemoteServiceTest { assertThat(result).isEqualTo(expectedBescheid); } - private BescheidItem getBescheid() { - return service.getBescheid(BescheidItemTestFactory.ID); + private AttachedItem getBescheid() { + return service.getBescheid(AttachedItemTestFactory.ID); } } @@ -378,7 +461,7 @@ class VorgangAttachedItemRemoteServiceTest { } private AttachedItem getItem() { - return service.getItem(BescheidItemTestFactory.ID); + return service.getItem(AttachedItemTestFactory.ID); } } @@ -387,9 +470,9 @@ class VorgangAttachedItemRemoteServiceTest { @Test void shouldSetBescheidId() { - var request = service.buildGetByIdRequest(BescheidItemTestFactory.ID); + var request = service.buildGetByIdRequest(AttachedItemTestFactory.ID); - assertThat(request.getId()).isEqualTo(BescheidItemTestFactory.ID); + assertThat(request.getId()).isEqualTo(AttachedItemTestFactory.ID); } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceITCase.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceITCase.java index bffdefb5ef06bb6f12b9966e41983ecdc2066fea..5bb7b63531909383162dd11ddcfdaf02949f7d73 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceITCase.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceITCase.java @@ -7,6 +7,7 @@ import java.util.Optional; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.info.BuildProperties; import org.springframework.boot.test.mock.mockito.MockBean; import de.ozgcloud.apilib.common.command.OzgCloudCommandService; @@ -23,6 +24,8 @@ class NachrichtServiceITCase { private OzgCloudCommandService commandService; @MockBean private CommandMapper commandMapper; + @MockBean + private BuildProperties buildProperties; @Nested class TestBuildMessage { diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java index 84ded81a81d00efedee18241e553e943e68cb919..dd3bfc977b5e4712b1bb9bae69070504132cf2fe 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java @@ -1,9 +1,11 @@ package de.ozgcloud.bescheid.nachricht; import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; +import java.util.Map; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; @@ -13,8 +15,18 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.apilib.common.command.OzgCloudCommand; +import de.ozgcloud.apilib.common.command.OzgCloudCommandService; +import de.ozgcloud.apilib.common.command.grpc.CommandMapper; +import de.ozgcloud.apilib.common.datatypes.GenericId; +import de.ozgcloud.apilib.user.OzgCloudUserId; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; +import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidTestFactory; +import de.ozgcloud.bescheid.vorgang.PostfachAddressTestFactory; +import de.ozgcloud.bescheid.vorgang.Vorgang; import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; +import de.ozgcloud.common.errorhandling.TechnicalException; class NachrichtServiceTest { @@ -24,6 +36,10 @@ class NachrichtServiceTest { @Mock private NachrichtRemoteService remoteService; + @Mock + private OzgCloudCommandService commandService; + @Mock + private CommandMapper commandMapper; @Nested class TestCreateNachrichtDraft { @@ -104,4 +120,222 @@ class NachrichtServiceTest { assertThat(message).isEqualTo("FROM_TEMPLATE"); } } + + @Nested + class TestSendNachricht { + + @Mock + private OzgCloudCommand ozgCloudCommand; + + @BeforeEach + void init() { + doReturn(ozgCloudCommand).when(service).buildSendBescheidCommand(any()); + } + + @Test + void shouldCallBuildBescheidCommand() { + var bescheid = BescheidTestFactory.create(); + + service.sendNachricht(bescheid); + + verify(service).buildSendBescheidCommand(bescheid); + } + + @Test + void shouldCallCommandService() { + service.sendNachricht(BescheidTestFactory.create()); + + verify(commandService).createAndWaitUntilDone(ozgCloudCommand); + } + + } + + @Nested + class TestBuildSendBescheidCommand { + + private static final Map<String, Object> bodyObject = Map.of("key", "value"); + private final Bescheid bescheid = BescheidTestFactory.create(); + + @BeforeEach + void init() { + doReturn(bodyObject).when(service).buildSendNachrichtCommandBody(any()); + } + + @Test + void shouldCallVorgangIdMapper() { + buildCommand(); + + verify(commandMapper).toOzgCloudVorgangId(VorgangTestFactory.ID.toString()); + } + + @Test + void shouldSetVorgangId() { + var vorgangId = OzgCloudVorgangId.from(VorgangTestFactory.ID.toString()); + when(commandMapper.toOzgCloudVorgangId(anyString())).thenReturn(vorgangId); + + var result = buildCommand(); + + assertThat(result.getVorgangId()).isEqualTo(vorgangId); + } + + @Test + void shouldCallMapRelationId() { + buildCommand(); + + verify(commandMapper).mapRelationId(VorgangTestFactory.ID.toString()); + } + + @Test + void shouldSetRelationId() { + var relationId = GenericId.from("relation-id"); + when(commandMapper.mapRelationId(anyString())).thenReturn(relationId); + + var result = buildCommand(); + + assertThat(result.getRelationId()).isEqualTo(relationId); + } + + @Test + void shouldSetOrder() { + var result = buildCommand(); + + assertThat(result.getOrder()).isEqualTo(NachrichtService.SEND_POSTFACH_NACHRICHT_ORDER); + } + + @Test + void shouldCallCreatedBy() { + buildCommand(); + + verify(commandMapper).toOzgCloudUserId(BescheidTestFactory.CREATED_BY.toString()); + } + + @Test + void shouldSetCreatedBy() { + var userId = OzgCloudUserId.from(BescheidTestFactory.CREATED_BY.toString()); + when(commandMapper.toOzgCloudUserId(anyString())).thenReturn(userId); + + var result = buildCommand(); + + assertThat(result.getCreatedBy()).isEqualTo(userId); + } + + @Test + void shouldCallBuildSendNachrichtCommandBody() { + buildCommand(); + + verify(service).buildSendNachrichtCommandBody(bescheid); + } + + @Test + void shouldSetBodyObject() { + var result = buildCommand(); + + assertThat(result.getBodyObject()).isEqualTo(bodyObject); + } + + private OzgCloudCommand buildCommand() { + return service.buildSendBescheidCommand(bescheid); + } + } + + @Nested + class TestBuildSendNachrichtCommandBody { + + private static final String POSTFACH_ID = "postfach-id"; + + private final Bescheid bescheid = BescheidTestFactory.create(); + + @BeforeEach + void init() { + doReturn(POSTFACH_ID).when(service).getPostfachId(any()); + } + + @Test + void shouldSetPostfachId() { + var result = service.buildSendNachrichtCommandBody(bescheid); + + assertThat(result).containsEntry(NachrichtService.FIELD_POSTFACH_ID, POSTFACH_ID); + } + + @Test + void shouldSetReplyOption() { + var result = service.buildSendNachrichtCommandBody(bescheid); + + assertThat(result).containsEntry(NachrichtService.FIELD_REPLY_OPTION, NachrichtService.REPLY_OPTION); + } + + @Test + void shouldSetSubject() { + var result = service.buildSendNachrichtCommandBody(bescheid); + + assertThat(result).containsEntry(NachrichtService.FIELD_SUBJECT, BescheidTestFactory.NACHRICHT_SUBJECT); + } + + @Test + void shouldSetMailBody() { + var result = service.buildSendNachrichtCommandBody(bescheid); + + assertThat(result).containsEntry(NachrichtService.FIELD_MAIL_BODY, BescheidTestFactory.NACHRICHT_TEXT); + } + + @Test + void shouldSetAttachments() { + var result = service.buildSendNachrichtCommandBody(bescheid); + + assertThat(result).containsEntry(NachrichtService.FIELD_ATTACHMENTS, BescheidTestFactory.BESCHEID_FILE_ID); + } + } + + @Nested + class TestGetPostfachId { + + private static final Vorgang.PostfachAddress POSTFACH_ADDRESS = PostfachAddressTestFactory.create(); + + @BeforeEach + void init() { + doReturn(Optional.of(POSTFACH_ADDRESS)).when(service).getAddress(any()); + } + + @Test + void shouldCallGetAddress() { + var bescheid = BescheidTestFactory.create(); + + service.getPostfachId(bescheid); + + verify(service).getAddress(bescheid); + } + + @Test + void shouldReturnPostfachId() { + var bescheid = BescheidTestFactory.create(); + + var result = service.getPostfachId(bescheid); + + assertThat(result).isEqualTo(PostfachAddressTestFactory.POSTFACH_ID); + } + + } + + @Nested + class TestNoPostfachId { + + @Test + void shouldThrowExceptionIfNoPostfachAddress() { + doReturn(Optional.empty()).when(service).getAddress(any()); + + assertThrows(TechnicalException.class, this::getPostfachId); + } + + @Test + void shouldThrowExceptionIfNoPostfachId() { + var postfachAddress = PostfachAddressTestFactory.createBuilder().identifier(Map.of()).build(); + doReturn(Optional.of(postfachAddress)).when(service).getAddress(any()); + + assertThrows(TechnicalException.class, this::getPostfachId); + } + + private void getPostfachId() { + service.getPostfachId(BescheidTestFactory.create()); + } + } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java index a19b60778f59f8a9fd72d3f2ce80706692a7b283..9696b3cba965a5c2a3c9cdfb50e87dc330b7e37a 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java @@ -37,7 +37,7 @@ class SmartDocumentsBescheidRemoteServiceTest { void shouldFillBescheid() { var bescheid = service.buildBescheid(BescheidRequestTestFactory.create(), SmartDocumentsResponseTestFactory.create()); - assertThat(bescheid).usingRecursiveComparison().ignoringFields("serviceKonto", "nachrichtSubject") + assertThat(bescheid).usingRecursiveComparison().ignoringFields("serviceKonto", "nachrichtSubject", "bescheidFileId") .isEqualTo(BescheidTestFactory.createBuilder().nachrichtText(Optional.empty()).build()); } } diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/AttachmentTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/PostfachAddressTestFactory.java similarity index 60% rename from nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/AttachmentTestFactory.java rename to bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/PostfachAddressTestFactory.java index bc3f4fd378d3af6be1a28a3fbb892f760f4e1d38..7f7ef749025025cc565b4b04b6a5db8183eb3fb1 100644 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/AttachmentTestFactory.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/PostfachAddressTestFactory.java @@ -21,26 +21,28 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.nachrichten.postfach.bayernid.proxy.message; +package de.ozgcloud.bescheid.vorgang; -import java.io.ByteArrayInputStream; +import java.util.Map; +import java.util.UUID; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Attachment.AttachmentBuilder; +import de.ozgcloud.bescheid.nachricht.NachrichtService; +import de.ozgcloud.bescheid.vorgang.Vorgang.PostfachAddress.PostfachAddressBuilder; -public class AttachmentTestFactory { +public class PostfachAddressTestFactory { - public static final String FILE_NAME = "test.txt"; - public static final String TYPE = "plain/text"; - public static final byte[] CONTENT = "test".getBytes(); + public static final String POSTFACH_ID = UUID.randomUUID().toString(); + public static final int TYPE = 1; + public static final String VERSION = "1.0"; - public static Attachment create() { + public static Vorgang.PostfachAddress create() { return createBuilder().build(); } - public static AttachmentBuilder createBuilder() { - return Attachment.builder() - .name(FILE_NAME) + public static PostfachAddressBuilder createBuilder() { + return Vorgang.PostfachAddress.builder() .type(TYPE) - .content(new ByteArrayInputStream(CONTENT)); + .version(VERSION) + .identifier(Map.of(NachrichtService.FIELD_POSTFACH_ID, POSTFACH_ID)); } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/ServiceKontoTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/ServiceKontoTestFactory.java index 9efe58ebcf125e07f34ac2c4a0c3622dc68e92bd..a08054b9b37b697c0cc2ec5b08b273e8ed4fcdc0 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/ServiceKontoTestFactory.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/ServiceKontoTestFactory.java @@ -1,6 +1,5 @@ package de.ozgcloud.bescheid.vorgang; -import de.ozgcloud.bescheid.vorgang.Vorgang.PostfachAddress; import de.ozgcloud.bescheid.vorgang.Vorgang.ServiceKonto; public class ServiceKontoTestFactory { @@ -11,6 +10,6 @@ public class ServiceKontoTestFactory { public static ServiceKonto.ServiceKontoBuilder createBuilder() { return ServiceKonto.builder() - .postfachAddress(PostfachAddress.builder().build()); + .postfachAddress(PostfachAddressTestFactory.create()); } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java index a9b9669ca351e63c42e259ec75d193b24c98355a..9589ada3b530def97b9876347110100bf7f788a7 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java @@ -47,10 +47,9 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; import de.ozgcloud.bescheid.BescheidTestFactory; +import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory; -import de.ozgcloud.bescheid.attacheditem.BescheidItem; -import de.ozgcloud.bescheid.attacheditem.BescheidItemTestFactory; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandTestFactory; import de.ozgcloud.common.binaryfile.FileId; @@ -74,7 +73,7 @@ class DocumentServiceTest { @Mock private DocumentMapper documentMapper; - private Command command = CommandTestFactory.createBuilder().relationId(RELATION_ID).build(); + private final Command command = CommandTestFactory.createBuilder().relationId(RELATION_ID).build(); @Nested class TestCreateBescheidDocument { @@ -87,7 +86,7 @@ class DocumentServiceTest { @Nested class TestWithCommand { - private Command command = CommandTestFactory.createBuilder().relationId(RELATION_ID) + private final Command command = CommandTestFactory.createBuilder().relationId(RELATION_ID) .bodyObject(Map.of(DocumentService.FIELD_DOCUMENT_FILE, FILE_ID)).build(); @BeforeEach @@ -123,7 +122,7 @@ class DocumentServiceTest { @Nested class TestWithBescheid { - private Bescheid bescheid = BescheidTestFactory.create().withBescheidFileId(FileId.from(BescheidTestFactory.BESCHEID_FILE_ID)); + private final Bescheid bescheid = BescheidTestFactory.create().withBescheidFileId(FileId.from(BescheidTestFactory.BESCHEID_FILE_ID)); @BeforeEach void init() { @@ -198,11 +197,11 @@ class DocumentServiceTest { @Test void shouldCallGetBescheidItem() { - when(attachedItemService.getBescheidItem(any())).thenReturn(BescheidItemTestFactory.create()); + when(attachedItemService.getBescheidItem(any())).thenReturn(AttachedItemTestFactory.createBescheid()); validateBescheidItem(); - verify(attachedItemService).getBescheidItem(BescheidItemTestFactory.ID); + verify(attachedItemService).getBescheidItem(AttachedItemTestFactory.ID); } @Test @@ -215,20 +214,20 @@ class DocumentServiceTest { @Test void shouldNotThrowExceptionIfNotDraft() { when(attachedItemService.getBescheidItem(any())).thenReturn( - BescheidItemTestFactory.createBuilder().bescheidData(Map.of(BescheidItem.FIELD_STATUS, "not-draft")).build()); + AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_STATUS, "not-draft").build()); assertThrows(TechnicalException.class, this::validateBescheidItem); } @Test void shouldValidateBescheidItem() { - when(attachedItemService.getBescheidItem(any())).thenReturn(BescheidItemTestFactory.create()); + when(attachedItemService.getBescheidItem(any())).thenReturn(AttachedItemTestFactory.createBescheid()); assertDoesNotThrow(this::validateBescheidItem); } void validateBescheidItem() { - service.validateBescheidItem(BescheidItemTestFactory.ID); + service.validateBescheidItem(AttachedItemTestFactory.ID); } } @@ -293,20 +292,20 @@ class DocumentServiceTest { @Nested class TestBuildAttachedItem { - private static final Map<String, Object> ITEM_MAP = Map.of("key", (Object) "value"); + private static final Map<String, Object> ITEM_MAP = Map.of("key", "value"); @Test void shouldSetVorgangId() { var attachedItem = buildAttachedItem(); - assertThat(attachedItem).containsEntry(BescheidItem.PROPERTY_VORGANG_ID, CommandTestFactory.VORGANG_ID); + assertThat(attachedItem).containsEntry(AttachedItem.PROPERTY_VORGANG_ID, CommandTestFactory.VORGANG_ID); } @Test void shouldSetClient() { var attachedItem = buildAttachedItem(); - assertThat(attachedItem).containsEntry(BescheidItem.PROPERTY_CLIENT, + assertThat(attachedItem).containsEntry(AttachedItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); } @@ -314,14 +313,14 @@ class DocumentServiceTest { void shouldSetItemName() { var attachedItem = buildAttachedItem(); - assertThat(attachedItem).containsEntry(BescheidItem.PROPERTY_ITEM_NAME, DocumentService.DOCUMENT_ITEM_NAME); + assertThat(attachedItem).containsEntry(AttachedItem.PROPERTY_ITEM_NAME, DocumentService.DOCUMENT_ITEM_NAME); } @Test void shouldSetItem() { var attachedItem = buildAttachedItem(); - assertThat(attachedItem).containsEntry(BescheidItem.PROPERTY_ITEM, ITEM_MAP); + assertThat(attachedItem).containsEntry(AttachedItem.PROPERTY_ITEM, ITEM_MAP); } private Map<String, Object> buildAttachedItem() { @@ -402,7 +401,7 @@ class DocumentServiceTest { @Test void shouldThrowExceptionIfFileIdMissing() { - bescheid = BescheidTestFactory.create(); + bescheid = BescheidTestFactory.createBuilder().bescheidFileId(null).build(); assertThrows(TechnicalException.class, () -> service.buildItemMap(bescheid)); diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/pom.xml b/nachrichten-bayernid-proxy/bayernid-proxy-impl/pom.xml deleted file mode 100644 index 48b8d1ed900b3118507b1c51cacbeff588ab1d5f..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/pom.xml +++ /dev/null @@ -1,228 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - 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. - ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>nachrichten-bayernid-proxy</artifactId> - <version>0.3.0-SNAPSHOT</version> - <relativePath>../</relativePath> - </parent> - - <artifactId>bayernid-proxy-impl</artifactId> - <name>OZG Cloud BayernID Proxy Implementation</name> - - <properties> - <jaxb-maven-plugin.version>4.0.0</jaxb-maven-plugin.version> - - <spring-boot.build-image.imageName>docker.ozg-sh.de/bayernid-proxy:build-latest</spring-boot.build-image.imageName> - </properties> - - <dependencies> - <dependency> - <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>bayernid-proxy-interface</artifactId> - <version>${project.version}</version> - </dependency> - - <!-- Spring --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.ws</groupId> - <artifactId>spring-ws-core</artifactId> - </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-oxm</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.ws</groupId> - <artifactId>spring-xml</artifactId> - </dependency> - - <!-- commons --> - <dependency> - <groupId>org.apache.httpcomponents.client5</groupId> - <artifactId>httpclient5</artifactId> - </dependency> - - <!-- grpc --> - <dependency> - <groupId>net.devh</groupId> - <artifactId>grpc-server-spring-boot-starter</artifactId> - </dependency> - <dependency> - <groupId>io.grpc</groupId> - <artifactId>grpc-inprocess</artifactId> - </dependency> - - <!-- aspectJ --> - <dependency> - <groupId>org.aspectj</groupId> - <artifactId>aspectjweaver</artifactId> - </dependency> - <dependency> - <groupId>org.aspectj</groupId> - <artifactId>aspectjrt</artifactId> - </dependency> - - <!-- Tools --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - </dependency> - <dependency> - <groupId>org.glassfish.jaxb</groupId> - <artifactId>jaxb-runtime</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.dataformat</groupId> - <artifactId>jackson-dataformat-xml</artifactId> - </dependency> - - <!-- Dev --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <optional>true</optional> - <scope>provided</scope> - </dependency> - - <!-- Test --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.junit.vintage</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-engine</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-params</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.wiremock</groupId> - <artifactId>wiremock-standalone</artifactId> - <version>${wiremock.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>net.devh</groupId> - <artifactId>grpc-client-spring-boot-starter</artifactId> - <scope>test</scope> - </dependency> - - </dependencies> - - <build> - <finalName>${project.artifactId}</finalName> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.jvnet.jaxb</groupId> - <artifactId>jaxb-maven-plugin</artifactId> - <version>${jaxb-maven-plugin.version}</version> - <configuration> - <schemas> - <schema> - <fileset> - <directory>${basedir}/src/main/resources/bayernid</directory> - <includes> - <include>*.wsdl</include> - </includes> - </fileset> - </schema> - <schema> - <fileset> - <directory>${basedir}/src/main/resources/bayernid</directory> - <includes> - <include>*.xsd</include> - </includes> - </fileset> - </schema> - </schemas> - <episode>false</episode> - </configuration> - <executions> - <execution> - <goals> - <goal>generate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> -</project> \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProperties.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProperties.java deleted file mode 100644 index 4fe6e1a75367636864088b1d13b506f7fb393b25..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProperties.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -import jakarta.validation.constraints.NotBlank; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.validation.annotation.Validated; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Validated -@Configuration -@ConfigurationProperties(prefix = "ozgcloud.bayernid") -public class BayernIdProperties { - - @NotBlank - private String server; - - private boolean useSsl = true; -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyApplication.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyApplication.java deleted file mode 100644 index 6b47fed8a9a59718b29fab5ac6006b03d81f7294..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyApplication.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -import java.util.TimeZone; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.EnableAspectJAutoProxy; -import org.springframework.scheduling.annotation.EnableAsync; - -@SpringBootApplication -@EnableAsync(proxyTargetClass = true) -@EnableAspectJAutoProxy(proxyTargetClass = true) -public class BayernIdProxyApplication { - - public static void main(String[] args) { - TimeZone.setDefault(TimeZone.getTimeZone("UTC")); - SpringApplication.run(BayernIdProxyApplication.class, args); - } - -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyConfiguration.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyConfiguration.java deleted file mode 100644 index 1705b377cb69f6fea167d7c54dd681289bf0fec8..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyConfiguration.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; -import org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager; -import org.apache.hc.client5.http.io.HttpClientConnectionManager; -import org.apache.hc.client5.http.socket.ConnectionSocketFactory; -import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory; -import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; -import org.apache.hc.core5.http.config.RegistryBuilder; -import org.springframework.boot.ssl.SslBundles; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.oxm.jaxb.Jaxb2Marshaller; -import org.springframework.ws.transport.http.HttpComponents5MessageSender; - -import akdb.bsp.postkorb.komm.webservice.ObjectFactory; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.akdb.BayernIdRemoteService; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageMapper; -import lombok.RequiredArgsConstructor; - -@Configuration -@RequiredArgsConstructor -class BayernIdProxyConfiguration { - - private final SslBundles sslBundles; - private final BayernIdProperties properties; - - @Bean - Jaxb2Marshaller createJaxb2Marshaller() { - var marshaller = new Jaxb2Marshaller(); - marshaller.setContextPaths("akdb.bsp.postkorb.komm.webservice", "de.akdb.egov.bsp.nachrichten"); - return marshaller; - } - - @Bean - BayernIdRemoteService soapHttpClient(BayernIdMessageMapper messageMapper, Jaxb2Marshaller marshaller) { - var bayernIdRemoteService = new BayernIdRemoteService(messageMapper, new ObjectFactory()); - bayernIdRemoteService.setMarshaller(marshaller); - bayernIdRemoteService.setUnmarshaller(marshaller); - bayernIdRemoteService.setDefaultUri(properties.getServer()); - bayernIdRemoteService.setMessageSender(createMessageSender()); - return bayernIdRemoteService; - } - - HttpComponents5MessageSender createMessageSender() { - var httpClient = HttpClientBuilder.create() - .setConnectionManager(createConnectionManager()) - .addRequestInterceptorFirst(new HttpComponents5MessageSender.RemoveSoapHeadersInterceptor()) - .build(); - return new HttpComponents5MessageSender(httpClient); - } - - private HttpClientConnectionManager createConnectionManager() { - var socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", new PlainConnectionSocketFactory()); - if (properties.isUseSsl()) { - socketFactoryRegistry.register("https", createSslConnectionSocketFactory()); - } - return new BasicHttpClientConnectionManager(socketFactoryRegistry.build()); - } - - private SSLConnectionSocketFactory createSslConnectionSocketFactory() { - return new SSLConnectionSocketFactory(sslBundles.getBundle("bayern-id-ca").createSslContext()); - } - -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyGrpcService.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyGrpcService.java deleted file mode 100644 index b92528052e8b3685c7d9804dd24e1685b3db5560..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyGrpcService.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.BayernIdProxyServiceGrpc.BayernIdProxyServiceImplBase; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageMapper; -import io.grpc.stub.StreamObserver; -import lombok.RequiredArgsConstructor; -import net.devh.boot.grpc.server.service.GrpcService; - -@GrpcService -@RequiredArgsConstructor -public class BayernIdProxyGrpcService extends BayernIdProxyServiceImplBase { - - private final BayernIdProxyService proxyService; - private final BayernIdMessageMapper messageMapper; - - @Override - public StreamObserver<GrpcSendBayernIdMessageRequest> sendMessageAsStream(StreamObserver<GrpcSendBayernIdMessageResponse> responseObserver) { - return new UploadStreamObserver(responseObserver, proxyService, messageMapper); - } -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyService.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyService.java deleted file mode 100644 index 1a760fd479ba85227a3a17f0473ad94abaf27109..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyService.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.akdb.BayernIdRemoteService; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdResponse; -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -public class BayernIdProxyService { - - private final BayernIdRemoteService bayernIdRemoteService; - - public BayernIdResponse sendPostfachNachricht(BayernIdMessage message) { - return bayernIdRemoteService.sendPostfachNachricht(message); - } - -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/DeleteOnCloseInputStream.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/DeleteOnCloseInputStream.java deleted file mode 100644 index d1655a9c7ddcc5627e7f30bcaec565c30a0431c0..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/DeleteOnCloseInputStream.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.bayernid.proxy; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.nio.file.Files; - -public class DeleteOnCloseInputStream extends FileInputStream { - - private final File file; - - public DeleteOnCloseInputStream(File file) throws FileNotFoundException { - super(file); - this.file = file; - } - - @Override - public void close() throws IOException { - super.close(); - Files.deleteIfExists(file.toPath()); - } -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserver.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserver.java deleted file mode 100644 index e223ae4e59c7483418cc295d8c018902f4fa0fd1..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserver.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -import static java.util.Objects.*; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.concurrent.atomic.AtomicReference; - -import com.google.protobuf.ByteString; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Attachment; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageMapper; -import io.grpc.stub.StreamObserver; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@RequiredArgsConstructor -public class UploadStreamObserver implements StreamObserver<GrpcSendBayernIdMessageRequest> { - - static final String ATTACHMENT_FILE_SUFFIX = ".ozg-cloud.tmp"; - - private final StreamObserver<GrpcSendBayernIdMessageResponse> responseObserver; - private final BayernIdProxyService proxyService; - private final BayernIdMessageMapper messageMapper; - - private final AtomicReference<BayernIdMessageBuilder> messageBuilder = new AtomicReference<>(); - private OutputStream attachmentWriter; - - @Override - public synchronized void onNext(GrpcSendBayernIdMessageRequest sendRequest) { - if (sendRequest.hasMessageMetadata()) { - readMessageMetadata(sendRequest.getMessageMetadata()); - return; - } - readAttachments(sendRequest.getAttachments()); - } - - void readMessageMetadata(GrpcBayernIdMessageMetadata sendRequest) { - messageBuilder.set(messageMapper.toBayernIdMessage(sendRequest)); - } - - void readAttachments(GrpcAttachments attachments) { - if (attachments.hasAttachmentMetadata()) { - addDataContainer(attachments.getAttachmentMetadata()); - return; - } - writeAttachment(attachments.getContent()); - } - - void addDataContainer(GrpcAttachmentMetadata attachmentMetadata) { - messageBuilder.get().attachment(buildAttachment(attachmentMetadata)); - } - - Attachment buildAttachment(GrpcAttachmentMetadata attachmentMetadata) { - var attachmentFile = createTemporallyFile(attachmentMetadata.getFileName()); - return Attachment.builder() - .name(attachmentMetadata.getFileName()) - .type(attachmentMetadata.getFileType()) - .content(attachmentFile) - .build(); - } - - InputStream createTemporallyFile(String fileName) { - try { - closeTemporallyWriter(); - var tempFilePath = createFile(fileName); - attachmentWriter = newOutputStream(tempFilePath); - return newInputStream(tempFilePath); - } catch (IOException e) { - throw new TechnicalException("Can not create temporary file for attachment " + fileName, e); - } - } - - Path createFile(String fileName) throws IOException { - var tmpFile = Files.createTempFile(fileName, ATTACHMENT_FILE_SUFFIX); - tmpFile.toFile().deleteOnExit(); - return tmpFile; - } - - OutputStream newOutputStream(Path filePath) throws IOException { - return Files.newOutputStream(filePath); - } - - InputStream newInputStream(Path filePath) throws IOException { - return new DeleteOnCloseInputStream(filePath.toFile()); - } - - void closeTemporallyWriter() { - try { - if (nonNull(attachmentWriter)) { - attachmentWriter.close(); - } - } catch (IOException e) { - throw new TechnicalException("Can not close attachment file", e); - } - } - - void writeAttachment(ByteString content) { - try { - attachmentWriter.write(content.toByteArray()); - attachmentWriter.flush(); - } catch (IOException e) { - throw new TechnicalException("Can not save attachment content", e); - } - } - - @Override - public void onError(Throwable t) { - closeTemporallyWriter(); - throw new TechnicalException("Error while sending postfach message", t); - } - - @Override - public void onCompleted() { - closeTemporallyWriter(); - try { - var bayernIdResponse = proxyService.sendPostfachNachricht(messageBuilder.get().build()); - responseObserver.onNext(messageMapper.fromBayernIdResponse(bayernIdResponse)); - responseObserver.onCompleted(); - } catch (Exception e) { - throw new TechnicalException("Error while sending postfach message", e); - } - } -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/akdb/BayernIdRemoteService.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/akdb/BayernIdRemoteService.java deleted file mode 100644 index 9446a6a57b9fa105e237b6542b2bfeb6cecab4b0..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/akdb/BayernIdRemoteService.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.akdb; - -import java.io.IOException; - -import jakarta.xml.bind.JAXBElement; - -import org.springframework.ws.client.core.support.WebServiceGatewaySupport; -import org.springframework.xml.transform.StringResult; -import org.springframework.xml.transform.StringSource; - -import akdb.bsp.postkorb.komm.webservice.ObjectFactory; -import akdb.bsp.postkorb.komm.webservice.SendBspNachrichtNative; -import akdb.bsp.postkorb.komm.webservice.SendBspNachrichtNativeOutput; -import de.akdb.egov.bsp.nachrichten.BspNachricht; -import de.akdb.egov.bsp.nachrichten.BspQuittung; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageMapper; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdResponse; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -public class BayernIdRemoteService extends WebServiceGatewaySupport { - - private final BayernIdMessageMapper messageMapper; - private final ObjectFactory objectFactory; - - public BayernIdResponse sendPostfachNachricht(BayernIdMessage message) { - var sendNachricht = createSendNachricht(message); - var sendBspNachrichtResponse = sendBspNachricht(sendNachricht); - var bspQuittung = createBspQuitung(sendBspNachrichtResponse); - return messageMapper.toBayernIdResponse(bspQuittung); - } - - SendBspNachrichtNative createSendNachricht(BayernIdMessage message) { - var bspNachricht = messageMapper.toBspNachricht(message); - var sendBspNachricht = new SendBspNachrichtNative(); - sendBspNachricht.setBspNachricht(buildBspNachrichtXml(bspNachricht)); - return sendBspNachricht; - } - - String buildBspNachrichtXml(BspNachricht message) { - try { - var result = new StringResult(); - getMarshaller().marshal(message, result); - return result.toString(); - } catch (IOException e) { - throw new TechnicalException("Error while marshalling BspNachricht", e); - } - } - - SendBspNachrichtNativeOutput sendBspNachricht(SendBspNachrichtNative request) { - return send(objectFactory.createSendBspNachrichtNative(request)).getValue(); - } - - @SuppressWarnings("unchecked") - JAXBElement<SendBspNachrichtNativeOutput> send(JAXBElement<SendBspNachrichtNative> jaxbSendBspNachrichtNative) { - return (JAXBElement<SendBspNachrichtNativeOutput>) getWebServiceTemplate().marshalSendAndReceive(jaxbSendBspNachrichtNative); - } - BspQuittung createBspQuitung(SendBspNachrichtNativeOutput bspNachrichtResponse) { - try { - return (BspQuittung) getUnmarshaller().unmarshal(new StringSource(bspNachrichtResponse.getBspQuittung())); - } catch (IOException e) { - throw new TechnicalException("Error while unmarshalling BspQuittung", e); - } - } - -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/errorhandling/ExceptionHandler.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/errorhandling/ExceptionHandler.java deleted file mode 100644 index fba0b8d8e0b7e1d5068e9f7a2bdf2d91519c0030..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/errorhandling/ExceptionHandler.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.errorhandling; - -import java.util.UUID; - -import de.ozgcloud.common.errorhandling.ExceptionUtil; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.common.grpc.GrpcUtil; -import io.grpc.Metadata; -import io.grpc.Status; -import io.grpc.StatusException; -import lombok.extern.log4j.Log4j2; -import net.devh.boot.grpc.server.advice.GrpcAdvice; -import net.devh.boot.grpc.server.advice.GrpcExceptionHandler; - -@GrpcAdvice -@Log4j2 -public class ExceptionHandler { - - static final String KEY_EXCEPTION_ID = "EXCEPTION_ID"; - - @GrpcExceptionHandler - public StatusException handleTechnicalException(TechnicalException e) { - LOG.error("Technical exception occurred", e); - return createStatusException(buildInternalStatus(e), buildMetadata(e.getExceptionId())); - } - - @GrpcExceptionHandler - public StatusException handleRuntimeException(RuntimeException e) { - var exceptionId = createExceptionId(); - LOG.error(ExceptionUtil.formatMessageWithExceptionId("gRPC internal exception.",exceptionId), e); - return createStatusException(buildInternalStatus(e), buildMetadata(exceptionId)); - } - - Status buildInternalStatus(RuntimeException e) { - return Status.INTERNAL.withDescription(e.getMessage()).withCause(e.getCause()); - } - - String createExceptionId() { - return UUID.randomUUID().toString(); - } - - Metadata buildMetadata(String exceptionId) { - var metadata = new Metadata(); - metadata.put(GrpcUtil.keyOfString(KEY_EXCEPTION_ID), exceptionId); - return metadata; - } - - StatusException createStatusException(Status status, Metadata metadata) { - return new StatusException(status, metadata); - } -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Absender.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Absender.java deleted file mode 100644 index e5cbd91cffbcaab77b6f96e86d391476def7694f..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Absender.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.message; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class Absender { - - private String postkorbId; - private String name; - private String anschrift; - private String email; - private String telefon; - private String hyperlink; - private String dienst; - private String mandant; - private String gemeindeschluessel; -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Attachment.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Attachment.java deleted file mode 100644 index 4c144a4f25b95a12b32ba22f21bfa228ed1f6aef..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Attachment.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.message; - -import java.io.InputStream; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class Attachment { - - private String name; - private String type; - private InputStream content; - -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessage.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessage.java deleted file mode 100644 index 71328dde692f42a4eb197722c9a21b03d9c87b1b..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessage.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.message; - -import java.util.List; - -import lombok.Builder; -import lombok.Getter; -import lombok.Singular; - -@Builder -@Getter -public class BayernIdMessage { - - private String messageId; - private String createdAt; - private String vorgangId; - private Absender absender; - private Empfaenger empfaenger; - private String subject; - private String storkQaaLevel; - private String text; - @Singular - private List<Attachment> attachments; -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageMapper.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageMapper.java deleted file mode 100644 index 0e7a7488191a84c17593abbcb887dfc7d3293469..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageMapper.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.message; - -import java.io.IOException; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.NullValuePropertyMappingStrategy; - -import de.akdb.egov.bsp.nachrichten.AbsenderType; -import de.akdb.egov.bsp.nachrichten.BspNachricht; -import de.akdb.egov.bsp.nachrichten.BspQuittung; -import de.akdb.egov.bsp.nachrichten.DataContainerType; -import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAbsender; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder; - -@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) -public interface BayernIdMessageMapper { - - String TABELLE_NUMMER_TEXT_ENCODING = "9004"; - String TABELLE_NUMMER_MIME_TYPE = "9005"; - String TABELLE_NUMMER_GEMEINDE_SCHLUESSEL = "36"; - String TEXT_ENCODING_PLAIN_TEXT = "text/plain"; - - @Mapping(target = "attachments", ignore = true) - BayernIdMessageBuilder toBayernIdMessage(GrpcBayernIdMessageMetadata grpcMessage); - - @Mapping(target = "gemeindeschluessel.tabelle", constant = TABELLE_NUMMER_GEMEINDE_SCHLUESSEL) - @Mapping(target = "gemeindeschluessel.schluessel", source = "gemeindeschluessel") - AbsenderType toAbsenderType(GrpcAbsender absender); - - @Mapping(target = "unknownFields", ignore = true) - @Mapping(target = "statusBytes", ignore = true) - @Mapping(target = "messageBytes", ignore = true) - @Mapping(target = "mergeUnknownFields", ignore = true) - @Mapping(target = "mergeFrom", ignore = true) - @Mapping(target = "clearOneof", ignore = true) - @Mapping(target = "clearField", ignore = true) - GrpcSendBayernIdMessageResponse fromBayernIdResponse(BayernIdResponse message); - - @Mapping(target = "nachrichtenKopf.identifikationNachricht.nachrichtenId", source = "messageId") - @Mapping(target = "nachrichtenKopf.identifikationNachricht.erstellungszeitpunkt", source = "createdAt") - @Mapping(target = "nachrichtenKopf.empfaenger.postkorbId", source = "empfaenger.postkorbId") - @Mapping(target = "nachrichtenKopf.empfaenger.name", source = "empfaenger.name") - @Mapping(target = "nachrichtenKopf.empfaenger.anschrift", source = "empfaenger.anschrift") - @Mapping(target = "nachrichtenKopf.absender", source = "absender") - @Mapping(target = "nachrichtenInhalt.betreff", source = "subject") - @Mapping(target = "nachrichtenInhalt.storkQaaLevel", source = "storkQaaLevel") - @Mapping(target = "nachrichtenInhalt.zuVorgang.vorgangsId", source = "vorgangId") - @Mapping(target = "nachrichtenInhalt.freiText.encoding.schluessel", constant = TEXT_ENCODING_PLAIN_TEXT) - @Mapping(target = "nachrichtenInhalt.freiText.encoding.tabelle", constant = TABELLE_NUMMER_TEXT_ENCODING) - @Mapping(target = "nachrichtenInhalt.freiText.text", source = "text") - @Mapping(target = "nachrichtenInhalt.dataContainer", source = "attachments") - BspNachricht toBspNachricht(BayernIdMessage message); - - @Mapping(target = "gemeindeschluessel.tabelle", constant = TABELLE_NUMMER_GEMEINDE_SCHLUESSEL) - @Mapping(target = "gemeindeschluessel.schluessel", source = "gemeindeschluessel") - AbsenderType toAbsenderType(Absender absender); - - default DataContainerType toDataContainerType(Attachment attachment) { - var dataContainer = new DataContainerType(); - dataContainer.setFileType(toSchluesseltabelleType(attachment)); - dataContainer.setFileName(attachment.getName()); - try { - var content = attachment.getContent(); - try { - dataContainer.setInhalt(content.readAllBytes()); - } finally { - content.close(); - } - } catch (IOException e) { - throw new TechnicalException("Error reading attachment content", e); - } - return dataContainer; - } - - default SchluesseltabelleType toSchluesseltabelleType(Attachment attachment) { - var schluesseltabelle = new SchluesseltabelleType(); - schluesseltabelle.setSchluessel(attachment.getType()); - schluesseltabelle.setTabelle(TABELLE_NUMMER_MIME_TYPE); - return schluesseltabelle; - } - - @Mapping(target = "status", source = "ergebnisStatus.schluessel") - @Mapping(target = "message", source = "ergaenzendeHinweise") - @Mapping(target = "success", source = "annahmeErfolgreich") - BayernIdResponse toBayernIdResponse(BspQuittung quittung); -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Empfaenger.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Empfaenger.java deleted file mode 100644 index 6cfd6fb4ef00f9ab4e2c315203c4f41b093b34fc..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Empfaenger.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.message; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class Empfaenger { - - private String postkorbId; - private String name; - private String anschrift; -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 31f436d781244c879e37eb6d97662f3c5102e6b7..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1,14 +0,0 @@ -net.devh.boot.grpc.common.autoconfigure.GrpcCommonCodecAutoConfiguration -net.devh.boot.grpc.common.autoconfigure.GrpcCommonTraceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcAdviceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcHealthServiceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataConsulConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataEurekaConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataNacosConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataZookeeperConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcReflectionServiceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerFactoryAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerMetricAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerSecurityAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerTraceAutoConfiguration diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application-dev.yml b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application-dev.yml deleted file mode 100644 index df2f1cca69b93f18902100a3a93997030beb2000..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application-dev.yml +++ /dev/null @@ -1,5 +0,0 @@ -ozgcloud: - bayernid: - proxy: - server: "https://infra-pre-id.bayernportal.de/bspx-postkorb-okkomm-ws/bspservices/postkorbkomm" - postkorbId: "28721c6f-b78f-4d5c-a048-19fd2fc429d2" diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application-local.yml b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application-local.yml deleted file mode 100644 index f048bc1e34b576c9d95d558300db721823dc58f5..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application-local.yml +++ /dev/null @@ -1,11 +0,0 @@ -logging: - config: classpath:log4j2-local.xml - -server: - port: 9097 -management: - server.port: 9098 - -grpc: - server: - port: 9099 diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application.yml b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application.yml deleted file mode 100644 index 69790c2b42e751213e739cf8ca6a87df6fd74068..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application.yml +++ /dev/null @@ -1,29 +0,0 @@ -logging: - level: - ROOT: WARN - '[de.ozgcloud]': INFO - config: classpath:log4j2-local.xml - - -management: - server: - port: 8081 - health: - livenessState: - enabled: true - readinessState: - enabled: true - endpoint: - health: - group: - exploratory: - include: livenessState,readinessState,ping - show-details: always - probes: - enabled: true - prometheus: - enabled: true - endpoints: - web: - exposure: - include: "*" diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl deleted file mode 100644 index a2df76060c0568ed74ed70e6cc71fdc6a9005c98..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl +++ /dev/null @@ -1,108 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<definitions name="PostkorbKommService" - xmlns="http://schemas.xmlsoap.org/wsdl/" - xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" - xmlns:bsp="http://akdb.de/portal/gehaltsabrechnungen-bspnachricht" - xmlns:tns="urn:akdb:bsp:postkorb:komm:webservice" - xmlns:xsd="http://www.w3.org/2001/XMLSchema" - targetNamespace="urn:akdb:bsp:postkorb:komm:webservice"> - <types> - <xs:schema - targetNamespace='urn:akdb:bsp:postkorb:komm:webservice' version='1.1' - xmlns:tns='urn:akdb:bsp:postkorb:komm:webservice' - xmlns:xs='http://www.w3.org/2001/XMLSchema'> - <xs:element name='sendBspNachricht' - type='tns:sendBspNachricht' /> - <xs:complexType name='sendBspNachricht'> - <xs:sequence> - <xs:element minOccurs='1' name='okKommBspNachrichtInput' - type='xs:base64Binary' /> - </xs:sequence> - </xs:complexType> - <xs:element name='sendBspNachrichtOutput' - type='tns:sendBspNachrichtOutput' /> - <xs:complexType name='sendBspNachrichtOutput'> - <xs:sequence> - <xs:element minOccurs='1' - name='okKommBspNachrichtOutput' type='xs:base64Binary' /> - </xs:sequence> - </xs:complexType> - <xs:element name='sendBspNachrichtNative' - type='tns:sendBspNachrichtNative' /> - <xs:complexType name='sendBspNachrichtNative'> - <xs:sequence> - <xs:element minOccurs='1' name='bspNachricht' - type='xs:string' /> - </xs:sequence> - </xs:complexType> - <xs:element name='sendBspNachrichtNativeOutput' - type='tns:sendBspNachrichtNativeOutput' /> - <xs:complexType name='sendBspNachrichtNativeOutput'> - <xs:sequence> - <xs:element minOccurs='1' name='bspQuittung' - type='xs:string' /> - </xs:sequence> - </xs:complexType> - </xs:schema> - </types> - <message name='PostkorbKommService_sendBspNachrichtInput'> - <part element='tns:sendBspNachricht' - name='okKommBspNachrichtInput'></part> - </message> - <message name='PostkorbKommService_sendBspNachrichtOutput'> - <part element='tns:sendBspNachrichtOutput' - name='sendBspNachrichtOutput'></part> - </message> - <message name='PostkorbKommService_sendBspNachrichtNativeInput'> - <part element='tns:sendBspNachrichtNative' - name='sendBspNachrichtNative'></part> - </message> - <message - name='PostkorbKommService_sendBspNachrichtNativeOutput'> - <part element='tns:sendBspNachrichtNativeOutput' - name='bspQuittung'></part> - </message> - <portType name='PostkorbKommPortType'> - <operation name='sendBspNachricht'> - <input message='tns:PostkorbKommService_sendBspNachrichtInput'></input> - <output - message='tns:PostkorbKommService_sendBspNachrichtOutput'></output> - </operation> - <operation name='sendBspNachrichtNative'> - <input - message='tns:PostkorbKommService_sendBspNachrichtNativeInput'></input> - <output - message='tns:PostkorbKommService_sendBspNachrichtNativeOutput'></output> - </operation> - </portType> - <binding name="PostkorbKommBinding" - type="tns:PostkorbKommPortType"> - <soap:binding style="document" - transport="http://schemas.xmlsoap.org/soap/http" /> - <operation name='sendBspNachricht'> - <soap:operation soapAction='' /> - <input> - <soap:body use='literal' /> - </input> - <output> - <soap:body use="literal" /> - </output> - </operation> - <operation name='sendBspNachrichtNative'> - <soap:operation soapAction='' /> - <input> - <soap:body use='literal' /> - </input> - <output> - <soap:body use="literal" /> - </output> - </operation> - </binding> - <service name="PostkorbKommService"> - <port name="PostkorbKommPort" binding="tns:PostkorbKommBinding"> - <!-- <soap:address location="${web-services-base- url}/bspservices/postkorbkomm" - /> --> - <soap:address location="http://localhost:8080/bspx-postkorb-okkomm-ws/bspservices/postkorbkomm" /> - </port> - </service> -</definitions> diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/bayernid/bspnachrichten-2.13.xsd b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/bayernid/bspnachrichten-2.13.xsd deleted file mode 100644 index 23b0e247d2bd9d2ab3f2206e4354d0c497844f28..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/bayernid/bspnachrichten-2.13.xsd +++ /dev/null @@ -1,343 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - Service- und Portalplattform - AKDB München, Geschäftsfeld eGovernment - - Copyright (c) AKDB - ---> -<xsd:schema targetNamespace="http://www.akdb.de/egov/bsp/nachrichten" - xmlns:xsd="http://www.w3.org/2001/XMLSchema" - xmlns:bsp="http://www.akdb.de/egov/bsp/nachrichten" - elementFormDefault="qualified"> - - <xsd:element name="BspNachricht"> - <xsd:annotation> - <xsd:appinfo> - <title>Nachricht für die Kommunikation zwischen Bürgerservice-Portal - und externen Fachverfahren</title> - </xsd:appinfo> - <xsd:documentation>Einheitliches Nachrichtenschema für die - Kommunikation zwischen Bürgerservice-Portal und externem Verfahren. - Nachrichten vom Bürgerservice-Portal an den Postkorb eines - Verfahrens - oder Nachrichten von den Verfahren an das Bürgerservice-Portal müssen - gemäß diesem Schema aufgebaut sein. - </xsd:documentation> - </xsd:annotation> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="NachrichtenKopf" type="bsp:NachrichtenKopfType"/> - <xsd:element name="NachrichtenInhalt" type="bsp:NachrichtenInhaltType"/> - </xsd:sequence> - <xsd:attribute name="version" use="required"> - <xsd:annotation> - <xsd:documentation>Dieses Attribut kennzeichnet die - Nachrichten-Version, z. B. "1.0", "1.1".</xsd:documentation> - </xsd:annotation> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:enumeration value="1.1"/> - <xsd:enumeration value="1.2"/> - <xsd:enumeration value="1.3"/> - <xsd:enumeration value="1.4"/> - <xsd:enumeration value="1.5"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:attribute> - <xsd:attribute name="fassung" use="required" > - <xsd:annotation> - <xsd:documentation>Dieses Attribut kennzeichnet das Datum, an dem - die diesen Schemata im Status final produziert wurde. Format: - YYYY-MM-DD.</xsd:documentation> - </xsd:annotation> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:enumeration value="2017-03-15"/> - <xsd:enumeration value="2018-04-01"/> - <xsd:enumeration value="2018-11-01"/> - <xsd:enumeration value="2019-06-28"/> - <xsd:enumeration value="2020-03-15"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:attribute> - <xsd:attribute name="produkt" type="xsd:string" use="optional"> - <xsd:annotation> - <xsd:documentation>In diesem Attribut ist der Name des Produktes - (der Software) einzutragen, mit dem diese Nachricht erstellt - worden ist. z.B. BSP, PWS</xsd:documentation> - </xsd:annotation> - </xsd:attribute> - <xsd:attribute name="produkthersteller" type="xsd:string" use="optional"/> - <xsd:attribute name="produktversion" type="xsd:string" use="optional"/> - </xsd:complexType> - </xsd:element> - - <xsd:element name="BspQuittung"> - <xsd:annotation> - <xsd:appinfo> - <title>Quittung über den Empfang einer BSO-Nachricht</title> - </xsd:appinfo> - <xsd:documentation>Zu einer empfangenen BSP-Nachricht wird eine - Quittung geliefert, die bestätigt, dass die Nachricht übernommen wurde - oder aufgrund eines technischen oder fachlichen Fehlers abgewiesen wurde. - </xsd:documentation> - </xsd:annotation> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="AnnahmeErfolgreich" type="xsd:boolean" minOccurs="1" maxOccurs="1"/> - <xsd:element name="ErgebnisStatus" type="bsp:SchluesseltabelleType" minOccurs="1" maxOccurs="1"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9006 (0 (erfolgreich angenommen), 99 (sonstiger technischer Fehler), ...)</xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="ErgaenzendeHinweise" type="xsd:string" minOccurs="0" maxOccurs="1"/> - </xsd:sequence> - <xsd:attribute name="version" use="required"> - <xsd:annotation> - <xsd:documentation>Dieses Attribut kennzeichnet die - Nachrichten-Version, z. B. "1.0", "1.1".</xsd:documentation> - </xsd:annotation> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:enumeration value="1.1"/> - <xsd:enumeration value="1.2"/> - <xsd:enumeration value="1.3"/> - <xsd:enumeration value="1.4"/> - <xsd:enumeration value="1.5"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:attribute> - <xsd:attribute name="fassung" use="required"> - <xsd:annotation> - <xsd:documentation>Dieses Attribut kennzeichnet das Datum, an dem - die diesen Schemata im Status final produziert wurde. Format: - YYYY-MM-DD.</xsd:documentation> - </xsd:annotation> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:enumeration value="2017-03-15"/> - <xsd:enumeration value="2018-04-01"/> - <xsd:enumeration value="2018-11-01"/> - <xsd:enumeration value="2019-06-28"/> - <xsd:enumeration value="2020-03-15"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:attribute> - <xsd:attribute name="produkt" type="xsd:string" use="optional"> - <xsd:annotation> - <xsd:documentation>In diesem Attribut ist der Name des Produktes - (der Software) einzutragen, mit dem diese Nachricht erstellt - worden ist. z.B. BSP, PWS</xsd:documentation> - </xsd:annotation> - </xsd:attribute> - <xsd:attribute name="produkthersteller" type="xsd:string" use="optional"/> - <xsd:attribute name="produktversion" type="xsd:string" use="optional"/> - </xsd:complexType> - </xsd:element> - - <xsd:complexType name="NachrichtenKopfType"> - <xsd:sequence> - <xsd:element name="Identifikation.Nachricht" type="bsp:Identifikation.NachrichtType" maxOccurs="1" minOccurs="1"/> - <xsd:element name="Anwenderkennung" type="xsd:string" minOccurs="0"> - <xsd:annotation> - <xsd:documentation> Die Anwenderkennung stellt Informationen über die absendende Person - zur Verfügung und dient der Protokollierung. - Anhand dieser Kennung kann die absendende Person identifiziert werden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Absender" type="bsp:AbsenderType" maxOccurs="1" minOccurs="1"/> - <xsd:element name="Empfaenger" type="bsp:EmpfaengerType" maxOccurs="1" minOccurs="1"/> - <xsd:element name="AntwortAuf" type="xsd:string" maxOccurs="1" minOccurs="0"> - <xsd:annotation> - <xsd:documentation>Eine Nachricht kann mit einer exisiterenden - Nachricht in Beziehung gebracht werden als Antwortnachricht oder - weitergeleitete Nachricht. Der Bezug erfolgt hierbei über die - NachrichtenId. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="WeiterleitungZu" type="xsd:string" minOccurs="0"/> - <xsd:element name="lesebestaetigungAntwortAdresse" type="xsd:string" minOccurs="0"/> - </xsd:sequence> - </xsd:complexType> - <xsd:complexType name="Identifikation.NachrichtType"> - <xsd:sequence> - <xsd:element name="Ereignis" type="bsp:SchluesseltabelleType"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9001, Schluessel: BspNachricht - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Erstellungszeitpunkt" type="xsd:dateTime" maxOccurs="1" minOccurs="1"/> - <xsd:element name="NachrichtenId" type="xsd:string" maxOccurs="1" minOccurs="1"> - <xsd:annotation> - <xsd:documentation>eine beliebige, eindeutige ID, die durch den - erstellenden Client generiert wird. Zusammen mit - Erstellungszeitpunkt und Absender kann eine Nachricht bsp-global - eindeutig identifiziert werden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="AbsenderType"> - <xsd:sequence> - <xsd:element name="PostkorbId" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Verfahren" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Dienst" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Mandant" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Gemeindeschluessel" type="bsp:SchluesseltabelleType" minOccurs="0"> - <xsd:annotation> - <xsd:documentation>Der amtliche Gemeindeschlüssel (AGS). - Als Tabellennummer ist hier die 36 (OSCI-XMeld-Schlüsseltabelle "Amtlicher Gemeindeschluessel") zu verwenden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Name" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Anschrift" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Email" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Telefon" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Hyperlink" type="xsd:string" maxOccurs="1" minOccurs="0"/> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="EmpfaengerType"> - <xsd:sequence> - <xsd:element name="PostkorbId" type="xsd:string" maxOccurs="1" minOccurs="1"/> - <xsd:element name="Verfahren" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Dienst" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Mandant" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Gemeindeschluessel" type="bsp:SchluesseltabelleType" minOccurs="0"> - <xsd:annotation> - <xsd:documentation>Der amtliche Gemeindeschlüssel (AGS). - Als Tabellennummer ist hier die 36 (OSCI-XMeld-Schlüsseltabelle "Amtlicher Gemeindeschluessel") zu verwenden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Name" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Anschrift" type="xsd:string" maxOccurs="1" minOccurs="0"/> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="NachrichtenInhaltType"> - <xsd:sequence> - <xsd:element name="Betreff" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="1"/> - <xsd:element name="Kategorie" type="bsp:SchluesseltabelleType" minOccurs="0"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9002 (KAT_STATUS, KAT_INFOBSP, ...) - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:choice minOccurs="0"> - <xsd:element name="StorkQaaLevel" type="bsp:StorkQaaLevel"/> - <xsd:element name="NpaGescheutzt" type="xsd:boolean" > - <!-- deprecated, wird durch StorkQaaLevel="STORK-QAA-Level-1" ersetzt --> - <xsd:annotation> - <xsd:documentation> - Diese Nachricht kann im BüsP-Postkorb nur nach - vorheriger Anmeldung mit dem nPA gelesen werden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:choice> - <xsd:element name="ZuVorgang" type="bsp:ZuVorgangType" minOccurs="0"/> - <xsd:element name="FreiText" type="bsp:FreiTextType"/> - <xsd:element name="DataContainer" type="bsp:DataContainerType" minOccurs="0" maxOccurs="unbounded"/> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="ZuVorgangType"> - <xsd:annotation> - <xsd:documentation>VorgangsName oder VorgangsId müssen angegeben - werden. Es können auch beide angegeben werden.</xsd:documentation> - </xsd:annotation> - <xsd:sequence minOccurs="0"> - <xsd:element name="VorgangsName" type="xsd:string"/> - <xsd:element name="VorgangsId" type="xsd:string"/> - <xsd:element name="VorgangStatus" type="bsp:SchluesseltabelleType"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9003 (ST_ERHALTEN, ST_GELESEN,...) - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="FreiTextType"> - <xsd:sequence> - <xsd:element name="Encoding" type="bsp:SchluesseltabelleType" maxOccurs="1" minOccurs="1"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9004 (text/plain, text/html, ...) - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Text" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="1"> - <xsd:annotation> - <xsd:documentation> - Wenn als Encoding text/plain festgelegt ist, so wird die Zeichensequenz "\n" als ein Zeilenvorschub interpretiert. - Das Backslash-Zeichen (\) wird mit einem weiteren Backslash-Zeichen entwertet. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="DataContainerType"> - <xsd:sequence minOccurs="0"> - <xsd:element name="Inhalt" type="xsd:base64Binary" maxOccurs="1" minOccurs="1"/> - <xsd:element name="FileName" maxOccurs="1" minOccurs="0"> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:maxLength value="255"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:element> - <xsd:element name="FileType" type="bsp:SchluesseltabelleType" maxOccurs="1" minOccurs="1"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9005 (application/pdf, text/html, ...) - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="SchluesseltabelleType"> - <xsd:annotation> - <xsd:documentation>Dieser Datentyp wird für Schlüsselwerte benötigt. - Mit dem Datentyp SchluesseltabelleType übermittelt man den Schlüssel - und die Nummer der Tabelle, in der das Schlüssel-Wert Paar definiert - worden ist. - </xsd:documentation> - </xsd:annotation> - <xsd:sequence> - <xsd:element name="Tabelle" type="xsd:string"/> - <xsd:element name="Schluessel" type="xsd:string"/> - </xsd:sequence> - </xsd:complexType> - - <xsd:simpleType name="StorkQaaLevel"> - <xsd:restriction base="xsd:string"> - <!-- since version 1.2 - deprecated --> - <xsd:enumeration value="LEVEL_1"/> - <xsd:enumeration value="LEVEL_2"/> - <xsd:enumeration value="LEVEL_3"/> - <xsd:enumeration value="LEVEL_4"/> - <!-- since version 1.3 --> - <xsd:enumeration value="STORK-QAA-Level-1"/> - <xsd:enumeration value="STORK-QAA-Level-2"/> - <xsd:enumeration value="STORK-QAA-Level-3"/> - <xsd:enumeration value="STORK-QAA-Level-4"/> - </xsd:restriction> - </xsd:simpleType> - <xsd:simpleType name="NonEmptyString"> - <xsd:restriction base="xsd:string"> - <xsd:minLength value="1"/> - </xsd:restriction> - </xsd:simpleType> -</xsd:schema> - - diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/log4j2-local.xml b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/log4j2-local.xml deleted file mode 100644 index 5d7001e1f9186d197a2d301d3910c9d73ed05d15..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/log4j2-local.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<configuration> - <Appenders> - <Console name="CONSOLE" target="SYSTEM_OUT"> - <PatternLayout pattern="[%-5level] %c{1.} %msg%n"/> - </Console> - </Appenders> - - <Loggers> - <Root level="WARN"> - <appender-ref ref="CONSOLE" /> - </Root> - </Loggers> -</configuration> \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyGrpcServiceITCase.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyGrpcServiceITCase.java deleted file mode 100644 index 8f9468c817590b7f34f0c83318084569ae09eaf6..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyGrpcServiceITCase.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -import static org.assertj.core.api.Assertions.*; - -import java.io.InputStream; -import java.util.Set; -import java.util.concurrent.ExecutionException; - -import org.apache.commons.lang3.tuple.Pair; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.Resource; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; - -import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo; -import com.github.tomakehurst.wiremock.junit5.WireMockTest; - -import de.ozgcloud.common.test.ITCase; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.akdb.BayernIdRemoteService; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.mock.GrpcBayernIdProxyTestClient; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.mock.MockBayernIdInitializer; -import io.grpc.StatusRuntimeException; -import lombok.SneakyThrows; -import net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration; -import net.devh.boot.grpc.client.autoconfigure.GrpcClientHealthAutoConfiguration; -import net.devh.boot.grpc.client.autoconfigure.GrpcClientMetricAutoConfiguration; -import net.devh.boot.grpc.client.autoconfigure.GrpcClientSecurityAutoConfiguration; -import net.devh.boot.grpc.client.autoconfigure.GrpcClientTraceAutoConfiguration; -import net.devh.boot.grpc.client.autoconfigure.GrpcDiscoveryClientAutoConfiguration; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@SpringBootTest(classes = BayernIdProxyApplication.class, properties = { - "grpc.server.inProcessName=test", - "grpc.client.inProcess.address=in-process:test", - "ozgcloud.bayernid.server: http://bayern-id", - "ozgcloud.bayernid.useSsl: false" -}) -@SpringJUnitConfig(classes = BayernIdProxyGrpcServiceITCase.TestConfig.class) -@DirtiesContext -@WireMockTest -@ITCase -class BayernIdProxyGrpcServiceITCase { - - @Autowired - private BayernIdProxyGrpcService service; - @Autowired - private BayernIdRemoteService bayernIdRemoteService; - - @GrpcClient("inProcess") - private BayernIdProxyServiceGrpc.BayernIdProxyServiceStub serviceStub; - - private MockBayernIdInitializer bayernIdInitializer; - - @Value("classpath:test.pdf") - private Resource pdfResource; - @Value("classpath:test.txt") - private Resource txtResource; - - private String pdfName = "test.pdf"; - private String txtName = "test.txt"; - - private GrpcBayernIdProxyTestClient grpcTestClient; - - @BeforeEach - void setup(WireMockRuntimeInfo wmRuntimeInfo) { - bayernIdRemoteService.setDefaultUri("http://localhost:" + wmRuntimeInfo.getHttpPort()); - bayernIdInitializer = new MockBayernIdInitializer(wmRuntimeInfo); - grpcTestClient = new GrpcBayernIdProxyTestClient(serviceStub); - } - - @Test - @SneakyThrows - void shouldSendMessage() { - bayernIdInitializer.createResponseOk(); - - var bayernIdResponse = grpcTestClient.sendMessage(GrpcBayernIdMessageMetadataTestFactory.create(), createAttachmentIterator()); - - assertThat(bayernIdResponse.isSuccess()).isTrue(); - assertThat(bayernIdResponse.getStatus()).isEqualTo("0"); - } - - @SneakyThrows - @Test - void shouldReceiveErrorResponse() { - bayernIdInitializer.createResponseError(); - - var bayernIdResponse = grpcTestClient.sendMessage(GrpcBayernIdMessageMetadataTestFactory.create(), createAttachmentIterator()); - - assertThat(bayernIdResponse.isSuccess()).isFalse(); - assertThat(bayernIdResponse.getStatus()).isEqualTo("31"); - assertThat(bayernIdResponse.getMessage()).isEqualTo("Unzulässiger Nachrichteninhalt"); - } - - @Test - void shouldPassException() { - bayernIdInitializer.createResponseWithException(); - - try { - grpcTestClient.sendMessage(GrpcBayernIdMessageMetadataTestFactory.create(), createAttachmentIterator()); - } catch (ExecutionException e) { - assertException(e.getMessage(), e.getCause()); - } - } - - @Test - void shouldPass500Response() { - bayernIdInitializer.create500Response(); - - try { - grpcTestClient.sendMessage(GrpcBayernIdMessageMetadataTestFactory.create(), createAttachmentIterator()); - } catch (ExecutionException e) { - assertException(e.getMessage(), e.getCause()); - } - } - - private void assertException(String exceptionMessage, Throwable cause) { - assertThat(cause).isInstanceOf(StatusRuntimeException.class); - assertThat(exceptionMessage).contains("(ExceptionId:"); - } - - - @SneakyThrows - Set<Pair<GrpcAttachmentMetadata, InputStream>> createAttachmentIterator() { - return Set.of( - Pair.of(GrpcAttachmentMetadata.newBuilder().setFileName(txtName).setFileType("text/plain").build(), txtResource.getInputStream()), - Pair.of(GrpcAttachmentMetadata.newBuilder().setFileName(pdfName).setFileType("application/pdf").build(), pdfResource.getInputStream()) - ); - } - - @Configuration - @ImportAutoConfiguration({ - GrpcClientAutoConfiguration.class, - GrpcClientHealthAutoConfiguration.class, - GrpcClientMetricAutoConfiguration.class, - GrpcClientSecurityAutoConfiguration.class, - GrpcClientTraceAutoConfiguration.class, - GrpcDiscoveryClientAutoConfiguration.class - }) - static class TestConfig { - } -} \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyServiceTest.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyServiceTest.java deleted file mode 100644 index 2bda292babf25b186a903b7d261ba22f00c241c8..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyServiceTest.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.akdb.BayernIdRemoteService; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdResponse; - -class BayernIdProxyServiceTest { - - @InjectMocks - private BayernIdProxyService service; - - @Mock - private BayernIdRemoteService remoteService; - @Mock - private BayernIdMessage message; - @Mock - private BayernIdResponse bayernIdResponse; - - @Test - void shouldCallRemoteService() { - sendMessage(); - - verify(remoteService).sendPostfachNachricht(message); - } - - @Test - void shouldReturnBayernIdResponse() { - when(remoteService.sendPostfachNachricht(any())).thenReturn(bayernIdResponse); - - var result = sendMessage(); - - assertThat(result).isEqualTo(bayernIdResponse); - } - - private BayernIdResponse sendMessage() { - return service.sendPostfachNachricht(message); - } -} \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdResponseTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdResponseTestFactory.java deleted file mode 100644 index 09b4146c945d211c8001de8b6570ccbae19c07f0..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdResponseTestFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdResponse; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdResponse.BayernIdResponseBuilder; - -public class BayernIdResponseTestFactory { - - public static final String STATUS = "OK"; - public static final String MESSAGE = "Message sent successfully"; - - public static BayernIdResponse create() { - return createBuilder().build(); - } - - public static BayernIdResponseBuilder createBuilder() { - return BayernIdResponse.builder() - .success(true) - .status(STATUS) - .message(MESSAGE); - } -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcAbsenderTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcAbsenderTestFactory.java deleted file mode 100644 index a955fd2dea9219c92f62c327c82c4278f734ddb7..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcAbsenderTestFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -public class GrpcAbsenderTestFactory { - - public static final String NAME = "Musterstadt Stadtverwaltung"; - public static final String ANSCHRIFT = "Musterstraße 1"; - public static final String EMAIL = "example@mail.loc"; - public static final String TELEFON = "0456123456789"; - public static final String HYPERLINK = "http://some.link"; - public static final String MANDANT = "Musterstadt"; - public static final String DIENST = "Stadtverwaltung"; - public static final String GEMEINDE_SCHLUESSEL = "123456789"; - - public static GrpcAbsender create() { - return createBuilder().build(); - } - - public static GrpcAbsender.Builder createBuilder() { - return GrpcAbsender.newBuilder() - .setName(NAME) - .setAnschrift(ANSCHRIFT) - .setEmail(EMAIL) - .setTelefon(TELEFON) - .setHyperlink(HYPERLINK) - .setMandant(MANDANT) - .setDienst(DIENST) - .setGemeindeschluessel(GEMEINDE_SCHLUESSEL); - } -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcBayernIdMessageMetadataTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcBayernIdMessageMetadataTestFactory.java deleted file mode 100644 index 854a5c1a22be51055d84ccb07f068822d358e405..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcBayernIdMessageMetadataTestFactory.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -import java.time.ZonedDateTime; -import java.util.GregorianCalendar; -import java.util.UUID; - -import javax.xml.datatype.DatatypeFactory; - -import lombok.SneakyThrows; - -public class GrpcBayernIdMessageMetadataTestFactory { - - public static final String MESSAGE_ID = "messageId"; - public static final ZonedDateTime CREATED_AT = ZonedDateTime.now(); - public static final String CREATED_AT_STRING = convertZoneDDateTime(CREATED_AT); - public static final String STORK_QAA_LEVEL = "LEVEL_1"; - public static final String SUBJECT = "subject"; - public static final String VORGANG_ID = UUID.randomUUID().toString(); - public static final String MESSAGE_TEXT = "some completely random text"; - - public static GrpcBayernIdMessageMetadata create() { - return createBuilder().build(); - } - - public static GrpcBayernIdMessageMetadata.Builder createBuilder() { - return GrpcBayernIdMessageMetadata.newBuilder() - .setMessageId(MESSAGE_ID) - .setCreatedAt(convertZoneDDateTime(CREATED_AT)) - .setAbsender(GrpcAbsenderTestFactory.create()) - .setEmpfaenger(GrpcEmpfaengerTestFactory.create()) - .setSubject(SUBJECT) - .setStorkQaaLevel(STORK_QAA_LEVEL) - .setVorgangId(VORGANG_ID) - .setText(MESSAGE_TEXT); - } - - @SneakyThrows - public static String convertZoneDDateTime(ZonedDateTime dateTime) { - return DatatypeFactory.newInstance().newXMLGregorianCalendar(GregorianCalendar.from(dateTime)).toString(); - } -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcEmpfaengerTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcEmpfaengerTestFactory.java deleted file mode 100644 index 5a0df823236427815e28e4851d6f428dc25cd8bf..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcEmpfaengerTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -public class GrpcEmpfaengerTestFactory { - - public static final String POSTFACH_ID = "postfach-id-1"; - public static final String NAME = "Max Empfaenger"; - public static final String ANSCHRIFT = "anschrift"; - - public static GrpcEmpfaenger create() { - return createBuilder().build(); - } - - public static GrpcEmpfaenger.Builder createBuilder() { - return GrpcEmpfaenger.newBuilder() - .setPostkorbId(POSTFACH_ID) - .setName(NAME) - .setAnschrift(ANSCHRIFT); - } -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserverTest.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserverTest.java deleted file mode 100644 index d6efd88993fe8d530db3edaeefa7f26ca8c28f3f..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserverTest.java +++ /dev/null @@ -1,404 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.file.Path; -import java.util.concurrent.atomic.AtomicReference; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.test.util.ReflectionTestUtils; - -import com.google.protobuf.ByteString; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Attachment; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageMapper; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageTestFactory; -import io.grpc.stub.StreamObserver; -import lombok.SneakyThrows; - -class UploadStreamObserverTest { - - @Spy - @InjectMocks - private UploadStreamObserver uploadStreamObserver; - - @Mock - private StreamObserver<GrpcSendBayernIdMessageResponse> responseObserver; - @Mock - private BayernIdProxyService proxyService; - @Mock - private BayernIdMessageMapper messageMapper; - @Mock - private BayernIdMessageBuilder bayernIdMessageBuilder; - @Mock - private AtomicReference<BayernIdMessageBuilder> messageBuilderAtomicReference; - - @Nested - class TestOnNext { - - @Test - void shouldCallReadMetadata() { - var messageMetadata = GrpcBayernIdMessageMetadataTestFactory.create(); - var sendRequest = GrpcSendBayernIdMessageRequest.newBuilder().setMessageMetadata(messageMetadata).build(); - - uploadStreamObserver.onNext(sendRequest); - - verify(uploadStreamObserver).readMessageMetadata(messageMetadata); - verify(uploadStreamObserver, never()).readAttachments(any()); - } - - @Test - void shouldCallReadAttachment() { - var attachments = GrpcAttachments.newBuilder().setAttachmentMetadata(GrpcAttachmentMetadataTestFactory.create()).build(); - var sendRequest = GrpcSendBayernIdMessageRequest.newBuilder().setAttachments(attachments).build(); - doNothing().when(uploadStreamObserver).readAttachments(any()); - - uploadStreamObserver.onNext(sendRequest); - - verify(uploadStreamObserver).readAttachments(attachments); - verify(uploadStreamObserver, never()).readMessageMetadata(any()); - } - } - - @Nested - class TestReadMessageMetadata { - - private GrpcBayernIdMessageMetadata messageMetadata = GrpcBayernIdMessageMetadataTestFactory.create(); - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(uploadStreamObserver, "messageBuilder", messageBuilderAtomicReference); - } - - @Test - void shouldCallMessageMapper() { - uploadStreamObserver.readMessageMetadata(messageMetadata); - - verify(messageMapper).toBayernIdMessage(messageMetadata); - } - - @Test - void shouldSetMessageBuilder() { - when(messageMapper.toBayernIdMessage(any())).thenReturn(bayernIdMessageBuilder); - - uploadStreamObserver.readMessageMetadata(messageMetadata); - - verify(messageBuilderAtomicReference).set(bayernIdMessageBuilder); - } - - } - - @Nested - class TestReadAttachments { - - @Test - void shouldCallAddContainer() { - var attachmentMetadata = GrpcAttachmentMetadataTestFactory.create(); - doNothing().when(uploadStreamObserver).addDataContainer(any()); - - uploadStreamObserver.readAttachments(GrpcAttachments.newBuilder().setAttachmentMetadata(attachmentMetadata).build()); - - verify(uploadStreamObserver).addDataContainer(attachmentMetadata); - verify(uploadStreamObserver, never()).writeAttachment(any()); - } - - @Test - void shouldCallWriteAttachment() { - var content = ByteString.copyFromUtf8("attachment"); - var attachment = GrpcAttachments.newBuilder().setContent(content).build(); - doNothing().when(uploadStreamObserver).writeAttachment(any()); - - uploadStreamObserver.readAttachments(attachment); - - verify(uploadStreamObserver).writeAttachment(content); - verify(uploadStreamObserver, never()).addDataContainer(any()); - } - - @Nested - class TestAddDataContainer { - - private GrpcAttachmentMetadata grpcAttachmentMetadata = GrpcAttachmentMetadataTestFactory.create(); - - @Mock - private Attachment attachment; - - @Mock - private AtomicReference<BayernIdMessageBuilder> atomicMessageBuilder; - - @BeforeEach - void setup() { - when(atomicMessageBuilder.get()).thenReturn(bayernIdMessageBuilder); - ReflectionTestUtils.setField(uploadStreamObserver, "messageBuilder", atomicMessageBuilder); - } - - @Test - void shouldCallBuildAttachment() { - uploadStreamObserver.addDataContainer(grpcAttachmentMetadata); - - verify(uploadStreamObserver).buildAttachment(grpcAttachmentMetadata); - } - - @Test - void shouldAddAttachment() { - doReturn(attachment).when(uploadStreamObserver).buildAttachment(any()); - - uploadStreamObserver.addDataContainer(grpcAttachmentMetadata); - - verify(bayernIdMessageBuilder).attachment(attachment); - } - } - - @Nested - class TestBuildAttachment { - - private GrpcAttachmentMetadata grpcAttachmentMetadata = GrpcAttachmentMetadataTestFactory.create(); - - @Mock - private InputStream tmpFileInputStream; - - @BeforeEach - void setup() { - doReturn(tmpFileInputStream).when(uploadStreamObserver).createTemporallyFile(any()); - } - - @Test - void shouldCallCreateTemporallyFile() { - uploadStreamObserver.buildAttachment(grpcAttachmentMetadata); - - verify(uploadStreamObserver).createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); - } - - @Test - void shouldSetTemporallyFile() { - var result = uploadStreamObserver.buildAttachment(grpcAttachmentMetadata); - - assertThat(result.getContent()).isEqualTo(tmpFileInputStream); - } - - @Test - void shouldSetAttachmentName() { - var result = uploadStreamObserver.buildAttachment(grpcAttachmentMetadata); - - assertThat(result.getName()).isEqualTo(GrpcAttachmentMetadataTestFactory.FILE_NAME); - } - - @Test - void shouldSetAttachmentType() { - var result = uploadStreamObserver.buildAttachment(grpcAttachmentMetadata); - - assertThat(result.getType()).isEqualTo(GrpcAttachmentMetadataTestFactory.FILE_TYPE); - } - } - - @Nested - class TestCreateTemporallyFile { - - @Mock - private OutputStream attachmentWriter; - @Mock - private InputStream tmpFileInputStream; - - private Path tempFilePath = Path.of("tempFile"); - - @Test - void shouldCallCloseTemporallyFile() { - - uploadStreamObserver.createTemporallyFile("test.txt"); - - verify(uploadStreamObserver).closeTemporallyWriter(); - } - - @SneakyThrows - @Test - void shouldCallCreateFile() { - uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); - - verify(uploadStreamObserver).createFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); - } - - @SneakyThrows - @Test - void shouldCallNewOutputStream() { - doReturn(tempFilePath).when(uploadStreamObserver).createFile(any()); - - uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); - - verify(uploadStreamObserver).newOutputStream(tempFilePath); - } - - @SneakyThrows - @Test - void shouldInitializeOutputWriter() { - doReturn(attachmentWriter).when(uploadStreamObserver).newOutputStream(any()); - - uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); - - assertThat(getAttachmentWriter()).isEqualTo(attachmentWriter); - } - - @SneakyThrows - @Test - void shouldCallNewInputStream() { - doReturn(tempFilePath).when(uploadStreamObserver).createFile(any()); - - uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); - - verify(uploadStreamObserver).newInputStream(tempFilePath); - } - - @SneakyThrows - @Test - void shouldReturnInputStream() { - doReturn(tmpFileInputStream).when(uploadStreamObserver).newInputStream(any()); - - var result = uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); - - assertThat(result).isEqualTo(tmpFileInputStream); - } - - @SneakyThrows - @Test - void shouldThrowException() { - doThrow(new IOException()).when(uploadStreamObserver).createFile(any()); - - assertThrows(TechnicalException.class, () -> uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME)); - } - - private OutputStream getAttachmentWriter() { - return (OutputStream) ReflectionTestUtils.getField(uploadStreamObserver, "attachmentWriter"); - } - } - } - - @Nested - class TestOnError { - - @Test - void shouldCallCloseTemporallyWriter() { - try { - uploadStreamObserver.onError(new RuntimeException()); - } catch (TechnicalException e) { - // expected - } - - verify(uploadStreamObserver).closeTemporallyWriter(); - } - - @Test - void shouldTrowTechnicalException() { - var cause = new RuntimeException(); - - var thrownException = assertThrows(TechnicalException.class, () -> uploadStreamObserver.onError(cause)); - - assertThat(thrownException.getCause()).isEqualTo(cause); - } - } - - @Nested - class TestOnComplete { - - @BeforeEach - void setup() { - when(messageBuilderAtomicReference.get()).thenReturn(bayernIdMessageBuilder); - ReflectionTestUtils.setField(uploadStreamObserver, "messageBuilder", messageBuilderAtomicReference); - } - - @Test - void shouldCallCloseTemporallyWriter() { - uploadStreamObserver.onCompleted(); - - verify(uploadStreamObserver).closeTemporallyWriter(); - } - - @Test - void shouldCallSendBayernIdMessage() { - var bayernIdMessage = BayernIdMessageTestFactory.create(); - when(bayernIdMessageBuilder.build()).thenReturn(bayernIdMessage); - - uploadStreamObserver.onCompleted(); - - verify(proxyService).sendPostfachNachricht(bayernIdMessage); - } - - @Test - void shouldCallMessageMapper() { - var bayernIdResponse = BayernIdResponseTestFactory.create(); - when(proxyService.sendPostfachNachricht(any())).thenReturn(bayernIdResponse); - - uploadStreamObserver.onCompleted(); - - verify(messageMapper).fromBayernIdResponse(bayernIdResponse); - } - - @Test - void shouldCallResponseObserver() { - var grpcSendResponse = GrpcSendBayernIdMessageResponse.newBuilder().build(); - when(messageMapper.fromBayernIdResponse(any())).thenReturn(grpcSendResponse); - - uploadStreamObserver.onCompleted(); - - verify(responseObserver).onNext(grpcSendResponse); - } - - @Test - void shouldCallSendResponse() { - uploadStreamObserver.onCompleted(); - - verify(responseObserver).onNext(any()); - } - - @Test - void shouldCallComplete() { - uploadStreamObserver.onCompleted(); - - verify(responseObserver).onCompleted(); - } - - @Test - void shouldThrowTechnicalException() { - var cause = new RuntimeException(); - - doThrow(cause).when(proxyService).sendPostfachNachricht(any()); - - var receivedException = assertThrows(TechnicalException.class, () -> uploadStreamObserver.onCompleted()); - assertThat(receivedException.getCause()).isEqualTo(cause); - } - } -} \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/akdb/BayernIdRemoteServiceTest.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/akdb/BayernIdRemoteServiceTest.java deleted file mode 100644 index 9d257bd0ad3013894d2cb1fdde68ca318bf18716..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/akdb/BayernIdRemoteServiceTest.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.akdb; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import jakarta.xml.bind.JAXBElement; - -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 org.springframework.ws.client.core.WebServiceTemplate; - -import akdb.bsp.postkorb.komm.webservice.ObjectFactory; -import akdb.bsp.postkorb.komm.webservice.SendBspNachrichtNative; -import akdb.bsp.postkorb.komm.webservice.SendBspNachrichtNativeOutput; -import de.akdb.egov.bsp.nachrichten.BspNachricht; -import de.akdb.egov.bsp.nachrichten.BspQuittung; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageMapper; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdResponse; - -class BayernIdRemoteServiceTest { - - @Spy - @InjectMocks - private BayernIdRemoteService service; - - @Mock - private BayernIdMessageMapper messageMapper; - @Mock - private ObjectFactory objectFactory; - - @Nested - class TestSendPostfachNachricht { - - @Mock - private SendBspNachrichtNative sendNachricht; - @Mock - private SendBspNachrichtNativeOutput sendBspNachrichtResponse; - @Mock - private BspQuittung bspQuittung; - @Mock - private JAXBElement<SendBspNachrichtNativeOutput> jaxbSendBspNachrichtNativeOutput; - @Mock - private BayernIdResponse response; - @Mock - private BayernIdMessage message; - - @BeforeEach - void setup(){ - doReturn(bspQuittung).when(service).createBspQuitung(any()); - doReturn(sendNachricht).when(service).createSendNachricht(any()); - } - - @Test - void shouldCallCreateSendNachricht() { - doReturn(jaxbSendBspNachrichtNativeOutput).when(service).send(any()); - - sendMessage(); - - verify(service).createSendNachricht(message); - } - - @Test - void shouldCallSendBspNachricht() { - doReturn(jaxbSendBspNachrichtNativeOutput).when(service).send(any()); - - sendMessage(); - - verify(service).sendBspNachricht(sendNachricht); - } - - @Test - void shouldCallCreateBspQuitung() { - doReturn(sendBspNachrichtResponse).when(service).sendBspNachricht(any()); - - sendMessage(); - - verify(service).createBspQuitung(sendBspNachrichtResponse); - } - - @Test - void shouldCallMessageMapper() { - doReturn(sendBspNachrichtResponse).when(service).sendBspNachricht(any()); - - sendMessage(); - - verify(messageMapper).toBayernIdResponse(bspQuittung); - } - - @Test - void shouldReturnResponse() { - doReturn(response).when(messageMapper).toBayernIdResponse(bspQuittung); - doReturn(sendBspNachrichtResponse).when(service).sendBspNachricht(any()); - - var result = sendMessage(); - - assertThat(result).isEqualTo(response); - } - - private BayernIdResponse sendMessage() { - return service.sendPostfachNachricht(message); - } - - } - - @Nested - class TestCreateSendNachricht { - - private static final String RESULT_STRING = "result"; - - @Mock - private BayernIdMessage message; - @Mock - private BspNachricht bspNachricht; - - @BeforeEach - void setup() { - doReturn(RESULT_STRING).when(service).buildBspNachrichtXml(any()); - } - - @Test - void shouldCallMessageMapper() { - service.createSendNachricht(message); - - verify(messageMapper).toBspNachricht(message); - } - - @Test - void shouldCallBuildBspNachrichtXml() { - when(messageMapper.toBspNachricht(any())).thenReturn(bspNachricht); - - service.createSendNachricht(message); - - verify(service).buildBspNachrichtXml(bspNachricht); - } - - @Test - void shouldSetBspNachricht() { - var result = service.createSendNachricht(message); - - assertThat(result.getBspNachricht()).isEqualTo(RESULT_STRING); - } - } - - @Nested - class TestSendBspNachricht { - - @Mock - private SendBspNachrichtNative sendBspNachrichtRequest; - @Mock - private JAXBElement<SendBspNachrichtNative> jaxbSendBspNachrichtNative; - @Mock - private JAXBElement<SendBspNachrichtNativeOutput> jaxbSendBspNachrichtNativeOutput; - @Mock - private SendBspNachrichtNativeOutput response; - - @BeforeEach - void setup() { - doReturn(jaxbSendBspNachrichtNativeOutput).when(service).send(any()); - when(jaxbSendBspNachrichtNativeOutput.getValue()).thenReturn(response); - } - - @Test - void shouldCallMarshaller() { - service.sendBspNachricht(sendBspNachrichtRequest); - - verify(objectFactory).createSendBspNachrichtNative(sendBspNachrichtRequest); - } - - @Test - void shouldReturnValue() { - var sendBspNachrichtNativeOutput = service.sendBspNachricht(sendBspNachrichtRequest); - - assertThat(sendBspNachrichtNativeOutput).isEqualTo(response); - } - - @Test - void shouldCallSend() { - when(objectFactory.createSendBspNachrichtNative(any())).thenReturn(jaxbSendBspNachrichtNative); - - service.sendBspNachricht(sendBspNachrichtRequest); - - verify(service).send(jaxbSendBspNachrichtNative); - } - - } - - @Nested - class TestSend { - - @Mock - private JAXBElement<SendBspNachrichtNative> jaxbSendBspNachrichtNative; - @Mock - private WebServiceTemplate webServiceTemplate; - - @Test - void shouldCallMarshalSendAndReceive() { - doReturn(webServiceTemplate).when(service).getWebServiceTemplate(); - - service.send(jaxbSendBspNachrichtNative); - - verify(webServiceTemplate).marshalSendAndReceive(jaxbSendBspNachrichtNative); - } - - } -} \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/errorhandling/ExceptionHandlerTest.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/errorhandling/ExceptionHandlerTest.java deleted file mode 100644 index ad74aecebb47abac348397281e65549b481a052b..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/errorhandling/ExceptionHandlerTest.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.errorhandling; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.common.grpc.GrpcUtil; -import io.grpc.Metadata; -import io.grpc.Status; -import io.grpc.Status.Code; -import io.grpc.StatusException; - -class ExceptionHandlerTest { - - @Spy - @InjectMocks - private ExceptionHandler exceptionHandler; - - @Nested - class TestHandleTechnicalException { - - private static final TechnicalException EXCEPTION = new TechnicalException("Test"); - - @Mock - private Metadata metadata; - @Mock - private StatusException statusException; - - @Test - void shouldCallBuildInternalStatus() { - exceptionHandler.handleTechnicalException(EXCEPTION); - - verify(exceptionHandler).buildInternalStatus(EXCEPTION); - } - - @Test - void shouldCallBuildMetadata() { - exceptionHandler.handleTechnicalException(EXCEPTION); - - verify(exceptionHandler).buildMetadata(EXCEPTION.getExceptionId()); - } - - @Test - void shouldCallCreateStatusException() { - var status = Status.INTERNAL; - doReturn(status).when(exceptionHandler).buildInternalStatus(any()); - doReturn(metadata).when(exceptionHandler).buildMetadata(any()); - - exceptionHandler.handleTechnicalException(EXCEPTION); - - verify(exceptionHandler).createStatusException(status, metadata); - } - - @Test - void shouldReturnStatusException() { - doReturn(statusException).when(exceptionHandler).createStatusException(any(), any()); - - var result = exceptionHandler.handleTechnicalException(EXCEPTION); - - assertThat(result).isEqualTo(statusException); - } - } - - @Nested - class TestHandleRuntimeException { - - private static final RuntimeException EXCEPTION = new RuntimeException("Test"); - - @Mock - private Metadata metadata; - @Mock - private StatusException statusException; - - @Test - void shouldCallBuildInternalStatus() { - exceptionHandler.handleRuntimeException(EXCEPTION); - - verify(exceptionHandler).buildInternalStatus(EXCEPTION); - } - - @Test - void shouldCallCreateExceptionId() { - exceptionHandler.handleRuntimeException(EXCEPTION); - - verify(exceptionHandler).createExceptionId(); - } - - @Test - void shouldCallBuildMetadata() { - var exceptionId = "42"; - doReturn(exceptionId).when(exceptionHandler).createExceptionId(); - - exceptionHandler.handleRuntimeException(EXCEPTION); - - verify(exceptionHandler).buildMetadata(exceptionId); - } - - @Test - void shouldCallCreateStatusException() { - var status = Status.INTERNAL; - doReturn(status).when(exceptionHandler).buildInternalStatus(any()); - doReturn(metadata).when(exceptionHandler).buildMetadata(any()); - - exceptionHandler.handleRuntimeException(EXCEPTION); - - verify(exceptionHandler).createStatusException(status, metadata); - } - - @Test - void shouldReturnStatusException() { - doReturn(statusException).when(exceptionHandler).createStatusException(any(), any()); - - var result = exceptionHandler.handleRuntimeException(EXCEPTION); - - assertThat(result).isEqualTo(statusException); - } - } - - @Nested - class TestBuildInternalStatus { - - private static final Exception CAUSE = new Exception("Cause"); - private static final RuntimeException EXCEPTION = new RuntimeException("Test", CAUSE); - - @Test - void shouldSetInternalStatusCode() { - var result = exceptionHandler.buildInternalStatus(EXCEPTION); - - assertThat(result.getCode()).isEqualTo(Code.INTERNAL); - } - - @Test - void shouldSetDescription() { - var result = exceptionHandler.buildInternalStatus(EXCEPTION); - - assertThat(result.getDescription()).isEqualTo(EXCEPTION.getMessage()); - } - - @Test - void shouldSetCause() { - var result = exceptionHandler.buildInternalStatus(EXCEPTION); - - assertThat(result.getCause()).isEqualTo(CAUSE); - } - } - - @Nested - class TestBuildMetadata { - - private static final String EXCEPTION_ID = "42"; - @Test - void shouldSetExceptionIdKey() { - var result = exceptionHandler.buildMetadata(EXCEPTION_ID); - - assertThat(result.keys()).containsOnly(ExceptionHandler.KEY_EXCEPTION_ID.toLowerCase()); - } - - @Test - void shouldSetExceptionIdValue() { - var result = exceptionHandler.buildMetadata(EXCEPTION_ID); - - assertThat(result.get(GrpcUtil.keyOfString(ExceptionHandler.KEY_EXCEPTION_ID))).isEqualTo(EXCEPTION_ID); - } - - } -} \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/AbsenderTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/AbsenderTestFactory.java deleted file mode 100644 index 31164b3b208dd923bc8d7f0ee156bcc73546d841..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/AbsenderTestFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.message; - -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Absender.AbsenderBuilder; - -public class AbsenderTestFactory { - - public static final String ABSENDER_POSTKORB_ID = "absenderPostkorbId"; - public static final String NAME = "Musterstadt Stadtverwaltung"; - public static final String ANSCHRIFT = "Musterstraße 1"; - public static final String EMAIL = "mail@exam.ple"; - public static final String TELEFON = "0456123456789"; - public static final String HYPERLINK = "http://some.link"; - public static final String MANDANT = "Musterstadt"; - public static final String DIENST = "Stadtverwaltung"; - public static final String GEMEINDE_SCHLUESSEL = "123456789"; - - public static Absender create() { - return createBuilder().build(); - } - - public static AbsenderBuilder createBuilder() { - return Absender.builder() - .postkorbId(ABSENDER_POSTKORB_ID) - .name(NAME) - .anschrift(ANSCHRIFT) - .email(EMAIL) - .telefon(TELEFON) - .hyperlink(HYPERLINK) - .mandant(MANDANT) - .dienst(DIENST) - .gemeindeschluessel(GEMEINDE_SCHLUESSEL); - } -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageMapperTest.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageMapperTest.java deleted file mode 100644 index f807b82c3e86863a7041a9fa29b148205f083262..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageMapperTest.java +++ /dev/null @@ -1,506 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.message; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.io.ByteArrayInputStream; -import java.util.List; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.Mockito; -import org.testcontainers.shaded.org.apache.commons.io.IOUtils; - -import de.akdb.egov.bsp.nachrichten.BspNachricht; -import de.akdb.egov.bsp.nachrichten.BspQuittung; -import de.akdb.egov.bsp.nachrichten.DataContainerType; -import de.akdb.egov.bsp.nachrichten.FreiTextType; -import de.akdb.egov.bsp.nachrichten.NachrichtenInhaltType; -import de.akdb.egov.bsp.nachrichten.NachrichtenKopfType; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.BayernIdResponseTestFactory; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAbsenderTestFactory; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadataTestFactory; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcEmpfaengerTestFactory; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; -import lombok.SneakyThrows; - -class BayernIdMessageMapperTest { - - private BayernIdMessageMapper mapper = Mappers.getMapper(BayernIdMessageMapper.class); - - @Nested - class ToBayernIdMessage { - - private static final GrpcBayernIdMessageMetadata MESSAGE_METADATA = GrpcBayernIdMessageMetadataTestFactory.create(); - - @Test - void shouldSetMessageId() { - var result = mapToBayernIdMessage(); - - assertThat(result.getMessageId()).isEqualTo(GrpcBayernIdMessageMetadataTestFactory.MESSAGE_ID); - } - - @Test - void shouldSetCreatedAt() { - var result = mapToBayernIdMessage(); - - assertThat(result.getCreatedAt()).isEqualTo(GrpcBayernIdMessageMetadataTestFactory.CREATED_AT_STRING); - } - - @Test - void shouldSetSubject() { - var result = mapToBayernIdMessage(); - - assertThat(result.getSubject()).isEqualTo(GrpcBayernIdMessageMetadataTestFactory.SUBJECT); - } - - @Test - void shoulSetStorkQaaLevel() { - var result = mapToBayernIdMessage(); - - assertThat(result.getStorkQaaLevel()).isEqualTo(GrpcBayernIdMessageMetadataTestFactory.STORK_QAA_LEVEL); - } - - @Test - void shouldSetVorgangId() { - var result = mapToBayernIdMessage(); - - assertThat(result.getVorgangId()).isEqualTo(GrpcBayernIdMessageMetadataTestFactory.VORGANG_ID); - } - - @Test - void shouldSetText() { - var result = mapToBayernIdMessage(); - - assertThat(result.getText()).isEqualTo(GrpcBayernIdMessageMetadataTestFactory.MESSAGE_TEXT); - } - - @Nested - class TestSetAbsender { - - @Test - void shouldSetName() { - var result = mapToAbsender(); - - assertThat(result.getName()).isEqualTo(GrpcAbsenderTestFactory.NAME); - } - - @Test - void shouldSetAnschrift() { - var result = mapToAbsender(); - - assertThat(result.getAnschrift()).isEqualTo(GrpcAbsenderTestFactory.ANSCHRIFT); - } - - @Test - void shouldSetEmail() { - var result = mapToAbsender(); - - assertThat(result.getEmail()).isEqualTo(GrpcAbsenderTestFactory.EMAIL); - } - - @Test - void shouldSetTelefon() { - var result = mapToAbsender(); - - assertThat(result.getTelefon()).isEqualTo(GrpcAbsenderTestFactory.TELEFON); - } - - @Test - void shouldSetHyperlink() { - var result = mapToAbsender(); - - assertThat(result.getHyperlink()).isEqualTo(GrpcAbsenderTestFactory.HYPERLINK); - } - - @Test - void shouldSetMandant() { - var result = mapToAbsender(); - - assertThat(result.getMandant()).isEqualTo(GrpcAbsenderTestFactory.MANDANT); - } - - @Test - void shouldSetDienst() { - var result = mapToAbsender(); - - assertThat(result.getDienst()).isEqualTo(GrpcAbsenderTestFactory.DIENST); - } - - @Test - void shouldSetGemeindeschluessel() { - var result = mapToAbsender(); - - assertThat(result.getGemeindeschluessel()).isEqualTo(GrpcAbsenderTestFactory.GEMEINDE_SCHLUESSEL); - } - - private Absender mapToAbsender() { - var bayernIdMessage = mapToBayernIdMessage(); - assertThat(bayernIdMessage.getAbsender()).isNotNull(); - return bayernIdMessage.getAbsender(); - } - } - - @Nested - class TestSetEmpfaenger { - - @Test - void shouldSetPostfachId() { - var result = mapToEmpfänger(); - - assertThat(result.getPostkorbId()).isEqualTo(GrpcEmpfaengerTestFactory.POSTFACH_ID); - } - - @Test - void shouldSetName() { - var result = mapToEmpfänger(); - - assertThat(result.getName()).isEqualTo(GrpcEmpfaengerTestFactory.NAME); - } - - @Test - void shouldSetAnschrift() { - var result = mapToEmpfänger(); - - assertThat(result.getAnschrift()).isEqualTo(GrpcEmpfaengerTestFactory.ANSCHRIFT); - } - - private Empfaenger mapToEmpfänger() { - var bayernIdMessage = mapToBayernIdMessage(); - assertThat(bayernIdMessage.getEmpfaenger()).isNotNull(); - return bayernIdMessage.getEmpfaenger(); - - } - } - - private BayernIdMessage mapToBayernIdMessage() { - return mapper.toBayernIdMessage(MESSAGE_METADATA).build(); - } - } - - @Nested - class TestFromBayernIdResponse { - - private static final BayernIdResponse BAYERN_ID_RESPONSE = BayernIdResponseTestFactory.create(); - - @Test - void shouldSetSuccess() { - var result = mapToGrpcSendBayernIdMessageResponse(); - - assertThat(result.getSuccess()).isTrue(); - } - - @Test - void shouldSetStatus() { - var result = mapToGrpcSendBayernIdMessageResponse(); - - assertThat(result.getStatus()).isEqualTo(BayernIdResponseTestFactory.STATUS); - } - - @Test - void shouldSetMessage() { - var result = mapToGrpcSendBayernIdMessageResponse(); - - assertThat(result.getMessage()).isEqualTo(BayernIdResponseTestFactory.MESSAGE); - } - - private GrpcSendBayernIdMessageResponse mapToGrpcSendBayernIdMessageResponse() { - return mapper.fromBayernIdResponse(BAYERN_ID_RESPONSE); - } - } - - @Nested - class TestToBspNachricht { - - @Nested - class TestSetNachrichtenKopf { - - @Test - void shouldSetNachrichtId() { - var result = mapToNachrichtenKopf().getIdentifikationNachricht(); - - assertThat(result.getNachrichtenId()).isEqualTo(BayernIdMessageTestFactory.MESSAGE_ID); - } - - @Test - void shouldSetErstellungszeitpunkt() { - var result = mapToNachrichtenKopf().getIdentifikationNachricht(); - - assertThat(result.getErstellungszeitpunkt()).hasToString(BayernIdMessageTestFactory.CREATED_AT); - } - - @Nested - class TestMapEmpfaenger { - - @Test - void shouldSetPostkorbId() { - var result = mapToNachrichtenKopf().getEmpfaenger(); - - assertThat(result.getPostkorbId()).isEqualTo(EmpfaengerTestFactory.POSTKORB_ID); - } - - @Test - void shouldSetName() { - var result = mapToNachrichtenKopf().getEmpfaenger(); - - assertThat(result.getName()).isEqualTo(EmpfaengerTestFactory.NAME); - } - - @Test - void shouldSetAnschrift() { - var result = mapToNachrichtenKopf().getEmpfaenger(); - - assertThat(result.getAnschrift()).isEqualTo(EmpfaengerTestFactory.ANSCHRIFT); - } - } - - @Nested - class TestMapAbsender { - - @Test - void shouldSetName() { - var result = mapToNachrichtenKopf().getAbsender(); - - assertThat(result.getName()).isEqualTo(AbsenderTestFactory.NAME); - } - - @Test - void shouldSetAnschrift() { - var result = mapToNachrichtenKopf().getAbsender(); - - assertThat(result.getAnschrift()).isEqualTo(AbsenderTestFactory.ANSCHRIFT); - } - - @Test - void shouldSetEmail() { - var result = mapToNachrichtenKopf().getAbsender(); - - assertThat(result.getEmail()).isEqualTo(AbsenderTestFactory.EMAIL); - } - - @Test - void shouldSetTelefon() { - var result = mapToNachrichtenKopf().getAbsender(); - - assertThat(result.getTelefon()).isEqualTo(AbsenderTestFactory.TELEFON); - } - - @Test - void shouldSetHyperlink() { - var result = mapToNachrichtenKopf().getAbsender(); - - assertThat(result.getHyperlink()).isEqualTo(AbsenderTestFactory.HYPERLINK); - } - - @Test - void shouldSetMandant() { - var result = mapToNachrichtenKopf().getAbsender(); - - assertThat(result.getMandant()).isEqualTo(AbsenderTestFactory.MANDANT); - } - - @Test - void shouldSetDienst() { - var result = mapToNachrichtenKopf().getAbsender(); - - assertThat(result.getDienst()).isEqualTo(AbsenderTestFactory.DIENST); - } - - @Test - void shouldSetGemeindeschluessel() { - var result = mapToNachrichtenKopf().getAbsender(); - - assertThat(result.getGemeindeschluessel().getSchluessel()).isEqualTo(AbsenderTestFactory.GEMEINDE_SCHLUESSEL); - } - - @Test - void shouldSetPostkorbId() { - var result = mapToNachrichtenKopf().getAbsender(); - - assertThat(result.getPostkorbId()).isEqualTo(AbsenderTestFactory.ABSENDER_POSTKORB_ID); - } - - @Test - void shouldSetGemeindeschluesselTabelle() { - var result = mapToNachrichtenKopf().getAbsender(); - - assertThat(result.getGemeindeschluessel().getTabelle()).isEqualTo(BayernIdMessageMapper.TABELLE_NUMMER_GEMEINDE_SCHLUESSEL); - } - - } - - private NachrichtenKopfType mapToNachrichtenKopf() { - var bspNachricht = mapToBspNachricht(); - assertThat(bspNachricht.getNachrichtenKopf()).isNotNull(); - return bspNachricht.getNachrichtenKopf(); - } - } - - @Nested - class TestNachrichtenInhalt { - - @Test - void shouldSetBetreff() { - var result = mapToNachrichtenInhalt(); - - assertThat(result.getBetreff()).isEqualTo(BayernIdMessageTestFactory.SUBJECT); - } - - @Test - void shouldSetStorkQaaLevel() { - var result = mapToNachrichtenInhalt(); - - assertThat(result.getStorkQaaLevel().name()).isEqualTo(BayernIdMessageTestFactory.STORK_QAA_LEVEL); - } - - @Test - void shouldSetVorgangsId() { - var result = mapToNachrichtenInhalt(); - - assertThat(result.getZuVorgang().getVorgangsId()).isEqualTo(BayernIdMessageTestFactory.VORGANG_ID); - } - - @Nested - class TestMapFreiText { - - @Test - void shouldSetEncodingSchluessel() { - var result = mapToFreiText(); - - assertThat(result.getEncoding().getSchluessel()).isEqualTo(BayernIdMessageMapper.TEXT_ENCODING_PLAIN_TEXT); - } - - @Test - void shouldSetEncodingTabelle() { - var result = mapToFreiText(); - - assertThat(result.getEncoding().getTabelle()).isEqualTo(BayernIdMessageMapper.TABELLE_NUMMER_TEXT_ENCODING); - } - - @Test - void shouldSetText() { - var result = mapToFreiText(); - - assertThat(result.getText()).isEqualTo(BayernIdMessageTestFactory.TEXT); - } - - private FreiTextType mapToFreiText() { - var bspNachricht = mapToBspNachricht(); - assertThat(bspNachricht.getNachrichtenInhalt().getFreiText()).isNotNull(); - return bspNachricht.getNachrichtenInhalt().getFreiText(); - } - } - - @Nested - class TestMapAttachments { - - @Test - void shouldSetName() { - var result = mapToDataContainerType(); - - assertThat(result.get(0).getFileName()).isEqualTo(AttachmentTestFactory.FILE_NAME); - } - - @Test - void shouldSetFileType() { - var result = mapToDataContainerType(); - - assertThat(result.get(0).getFileType().getSchluessel()).isEqualTo(AttachmentTestFactory.TYPE); - } - - @Test - void shouldSetFielTypeTable() { - var result = mapToDataContainerType(); - - assertThat(result.get(0).getFileType().getTabelle()).isEqualTo(BayernIdMessageMapper.TABELLE_NUMMER_MIME_TYPE); - } - - @Test - void shouldSetInhalt() { - var result = mapToDataContainerType(); - - var attachmentInputStream = result.get(0); - assertThat(attachmentInputStream.getInhalt()).isEqualTo(AttachmentTestFactory.CONTENT); - } - - @SneakyThrows - @Test - void shouldCloseSourceStream() { - var inputStream = spy(new ByteArrayInputStream(AttachmentTestFactory.CONTENT)); - - var r1 = mapper.toDataContainerType(AttachmentTestFactory.createBuilder().content(inputStream).build()); - - verify(inputStream).close(); - } - - private List<DataContainerType> mapToDataContainerType() { - return mapToNachrichtenInhalt().getDataContainer(); - } - } - - private NachrichtenInhaltType mapToNachrichtenInhalt() { - var bspNachricht = mapToBspNachricht(); - assertThat(bspNachricht.getNachrichtenInhalt()).isNotNull(); - return bspNachricht.getNachrichtenInhalt(); - } - } - - private BspNachricht mapToBspNachricht() { - return mapper.toBspNachricht(BayernIdMessageTestFactory.create()); - } - } - - @Nested - class TestMapToBayernIdResponse { - - @Test - void shouldSetSuccess() { - var result = mapToBayernIdResponse(); - - assertThat(result.isSuccess()).isTrue(); - } - - @Test - void shouldSetStatus() { - var result = mapToBayernIdResponse(); - - assertThat(result.getStatus()).isEqualTo(BspQuitungTestFactory.STATUS_SCHLUESSEL); - } - - @Test - void shouldSetMessage() { - var result = mapToBayernIdResponse(); - - assertThat(result.getMessage()).isEqualTo(BspQuitungTestFactory.ERGAENZENDE_HINWEISE); - } - - private BayernIdResponse mapToBayernIdResponse() { - return mapper.toBayernIdResponse(BspQuitungTestFactory.create()); - } - } -} \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageTestFactory.java deleted file mode 100644 index a9de0cb463ce242f7c327f0bdf1a5de7fb1b590a..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageTestFactory.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.message; - -import java.util.Collections; -import java.util.List; - -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder; - -public class BayernIdMessageTestFactory { - - public static final String MESSAGE_ID = "messageId"; - public static final String CREATED_AT = "2021-01-01T00:00:00Z"; - public static final String VORGANG_ID = "vorgangId"; - public static final String SUBJECT = "subject"; - public static final String STORK_QAA_LEVEL = "LEVEL_1"; - public static final String TEXT = "text"; - - public static BayernIdMessage create() { - return createBuilder().build(); - } - - public static BayernIdMessageBuilder createBuilder() { - return BayernIdMessage.builder() - .messageId(MESSAGE_ID) - .createdAt(CREATED_AT) - .vorgangId(VORGANG_ID) - .subject(SUBJECT) - .storkQaaLevel(STORK_QAA_LEVEL) - .text(TEXT) - .empfaenger(EmpfaengerTestFactory.create()) - .absender(AbsenderTestFactory.create()) - .attachments(List.of(AttachmentTestFactory.create())); - } - -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdRsponseTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdRsponseTestFactory.java deleted file mode 100644 index a66934b4c61a437c29a15f6e426488f8f8e51ada..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdRsponseTestFactory.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.message; - -public class BayernIdRsponseTestFactory { - - -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BspQuitungTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BspQuitungTestFactory.java deleted file mode 100644 index a526db4943155c6b1d4301abb6374de7bcf80bd5..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BspQuitungTestFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.message; - -import de.akdb.egov.bsp.nachrichten.BspQuittung; -import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType; - -public class BspQuitungTestFactory { - - public static final String STATUS_SCHLUESSEL = "OK"; - public static final String ERGAENZENDE_HINWEISE = "Hinweis"; - - public static BspQuittung create() { - var statusTable = new SchluesseltabelleType(); - statusTable.setSchluessel(STATUS_SCHLUESSEL); - var quittung = new BspQuittung(); - quittung.setAnnahmeErfolgreich(true); - quittung.setErgebnisStatus(statusTable); - quittung.setErgaenzendeHinweise(ERGAENZENDE_HINWEISE); - return quittung; - } -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/EmpfaengerTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/EmpfaengerTestFactory.java deleted file mode 100644 index ce10fb25a7a096df6b04309a52b80d8bd1ecaa85..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/EmpfaengerTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.message; - -public class EmpfaengerTestFactory { - - public static final String POSTKORB_ID = "postfachId"; - public static final String NAME = "name"; - public static final String ANSCHRIFT = "anschrift"; - - public static Empfaenger create() { - return createBuilder().build(); - } - - public static Empfaenger.EmpfaengerBuilder createBuilder() { - return Empfaenger.builder() - .postkorbId(POSTKORB_ID) - .name(NAME) - .anschrift(ANSCHRIFT); - } -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/BayernIdResponse.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/BayernIdResponse.java deleted file mode 100644 index 7e580efe72ed4adf560a30d132329b182808ab35..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/BayernIdResponse.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.mock; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class BayernIdResponse { - - private boolean success; - private String status; - private String message; - -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/GrpcBayernIdProxyTestClient.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/GrpcBayernIdProxyTestClient.java deleted file mode 100644 index 14377844a1a24d94727bb4e32893e0b36ffcec43..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/GrpcBayernIdProxyTestClient.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.mock; - -import java.io.InputStream; -import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; - -import org.apache.commons.lang3.tuple.Pair; - -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.BayernIdProxyServiceGrpc; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachmentMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; - -@RequiredArgsConstructor -public class GrpcBayernIdProxyTestClient { - - static final int CHUNK_SIZE = 255 * 1024; - - private final BayernIdProxyServiceGrpc.BayernIdProxyServiceStub serviceStub; - - @SneakyThrows - public BayernIdResponse sendMessage(GrpcBayernIdMessageMetadata messageMetadata, Set<Pair<GrpcAttachmentMetadata, InputStream>> attachments) throws - ExecutionException { - var streamer = new MockChunkedDataStreamer(messageMetadata, attachments, CHUNK_SIZE); - var future = new CompletableFuture<BayernIdResponse>(); - serviceStub.sendMessageAsStream(new MockBayernIdSendStreamObserver(future, streamer)); - return future.get(10, TimeUnit.SECONDS); - } - -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockBayernIdInitializer.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockBayernIdInitializer.java deleted file mode 100644 index b8783960212ad82bc38654f8103e29deeb5027f2..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockBayernIdInitializer.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.mock; - -import static com.github.tomakehurst.wiremock.client.WireMock.*; - -import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo; - -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -public class MockBayernIdInitializer { - - private static final String RESPONSE_TEMPLATE = """ - <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> - <SOAP-ENV:Header/> - <SOAP-ENV:Body> - <ns2:sendBspNachrichtNativeOutput xmlns:ns2="urn:akdb:bsp:postkorb:komm:webservice"> - <bspQuittung>%s</bspQuittung> - </ns2:sendBspNachrichtNativeOutput> - </SOAP-ENV:Body> - </SOAP-ENV:Envelope> - """; - public static final String BSP_NACHRICHT_SUCCESS = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><BspQuittung version=\"1.5\" fassung=\"2020-03-15\" xmlns=\"http://www.akdb.de/egov/bsp/nachrichten\"><AnnahmeErfolgreich>true</AnnahmeErfolgreich><ErgebnisStatus><Tabelle>9006</Tabelle><Schluessel>0</Schluessel></ErgebnisStatus><ErgaenzendeHinweise>Nachricht wurde angenommen</ErgaenzendeHinweise></BspQuittung>"; - public static final String BSP_NACHRICHT_ERROR = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><BspQuittung version=\"1.5\" fassung=\"2020-03-15\" xmlns=\"http://www.akdb.de/egov/bsp/nachrichten\"><AnnahmeErfolgreich>false</AnnahmeErfolgreich><ErgebnisStatus><Tabelle>9006</Tabelle><Schluessel>31</Schluessel></ErgebnisStatus><ErgaenzendeHinweise>Unzulässiger Nachrichteninhalt</ErgaenzendeHinweise></BspQuittung>"; - - public final WireMockRuntimeInfo wmRuntimeInfo; - - public void createResponseOk() { - wmRuntimeInfo.getWireMock().register( - post("/").willReturn(aResponse() - .withStatus(200) - .withHeader("Content-Type", "text/xml") - .withHeader("charset", "UTF-8") - .withBody(RESPONSE_TEMPLATE.formatted(BSP_NACHRICHT_SUCCESS)) - )); - } - - public void createResponseError() { - wmRuntimeInfo.getWireMock().register( - post("/").willReturn(aResponse() - .withStatus(200) - .withHeader("Content-Type", "text/xml") - .withHeader("charset", "UTF-8") - .withBody(RESPONSE_TEMPLATE.formatted(BSP_NACHRICHT_ERROR)) - )); - } - - public void createResponseWithException() { - wmRuntimeInfo.getWireMock().register( - post("/").willReturn(aResponse() - .withStatus(200) - .withHeader("Content-Type", "text/xml") - .withHeader("charset", "UTF-8") - .withBody("Internal Server Error") - )); - } - - public void create500Response() { - wmRuntimeInfo.getWireMock().register( - post("/").willReturn(aResponse() - .withStatus(500) - .withBody("Internal Server Error") - )); - } - -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockBayernIdSendStreamObserver.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockBayernIdSendStreamObserver.java deleted file mode 100644 index 242136773ccd360dba8ebb019b4113b579f5668a..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockBayernIdSendStreamObserver.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.mock; - -import java.util.concurrent.CompletableFuture; - -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; -import io.grpc.stub.ClientCallStreamObserver; -import io.grpc.stub.ClientResponseObserver; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor(access = AccessLevel.PROTECTED) -class MockBayernIdSendStreamObserver implements ClientResponseObserver<GrpcSendBayernIdMessageRequest, GrpcSendBayernIdMessageResponse> { - - private final CompletableFuture<BayernIdResponse> fileIdFuture; - private final MockChunkedDataStreamer fileStreamer; - - @Getter - private BayernIdResponse bayernIdResponse; - - private ClientCallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @Override - public void beforeStart(ClientCallStreamObserver<GrpcSendBayernIdMessageRequest> requestStream) { - this.requestObserver = requestStream; - requestObserver.setOnReadyHandler(() -> fileStreamer.sendChunkedTo(requestObserver)); - } - - @Override - public void onNext(GrpcSendBayernIdMessageResponse response) { - bayernIdResponse = BayernIdResponse.builder().success(response.getSuccess()).message(response.getMessage()).status(response.getStatus()) - .build(); - } - - @Override - public void onError(Throwable t) { - fileIdFuture.completeExceptionally(t); - } - - @Override - public void onCompleted() { - fileIdFuture.complete(bayernIdResponse); - } -} \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockChunkedDataStreamer.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockChunkedDataStreamer.java deleted file mode 100644 index 3ecf22321e0254432f47efd0cacc4302fc6b119d..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockChunkedDataStreamer.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy.mock; - -import static java.util.Objects.*; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Set; - -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.tuple.Pair; - -import com.google.protobuf.ByteString; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachmentMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachments; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import io.grpc.stub.CallStreamObserver; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -class MockChunkedDataStreamer { - - private Set<Pair<GrpcAttachmentMetadata, InputStream>> attachments; - private final int chunkSize; - private boolean isFinished = false; - private GrpcBayernIdMessageMetadata messageMetadata; - - public MockChunkedDataStreamer(GrpcBayernIdMessageMetadata metadata, Set<Pair<GrpcAttachmentMetadata, InputStream>> attachments, int chunkSize) { - this.messageMetadata = metadata; - this.attachments = attachments; - this.chunkSize = chunkSize; - } - - public synchronized void sendChunkedTo(CallStreamObserver<GrpcSendBayernIdMessageRequest> streamObserver) { - if (isFinished) { - return; - } - sendMessageMetadata(streamObserver); - attachments.forEach(attachment -> { - sendAttachmentMetadata(attachment.getLeft(), streamObserver); - sendContentChunked(attachment.getRight(), streamObserver); - }); - handleFileEndReached(streamObserver); - } - - void sendContentChunked(InputStream contentStream, CallStreamObserver<GrpcSendBayernIdMessageRequest> streamObserver) { - var inProgerss = true; - do { - int size = sendNextChunk(contentStream, streamObserver); - if (size < chunkSize) { - sendNextChunk(contentStream, streamObserver); - inProgerss = false; - } - } while (inProgerss && streamObserver.isReady()); - IOUtils.closeQuietly(contentStream); - } - - void sendMessageMetadata(CallStreamObserver<GrpcSendBayernIdMessageRequest> streamObserver) { - if (nonNull(messageMetadata)) { - streamObserver.onNext(buildRequestWithMetadata(messageMetadata)); - messageMetadata = null; - } - } - - GrpcSendBayernIdMessageRequest buildRequestWithMetadata(GrpcBayernIdMessageMetadata metadata) { - return GrpcSendBayernIdMessageRequest.newBuilder().setMessageMetadata(metadata).build(); - } - - void sendAttachmentMetadata(GrpcAttachmentMetadata metadata, CallStreamObserver<GrpcSendBayernIdMessageRequest> streamObserver) { - streamObserver.onNext(buildRequestWithAttachmentMetadata(metadata)); - } - - GrpcSendBayernIdMessageRequest buildRequestWithAttachmentMetadata(GrpcAttachmentMetadata attachmentMetadata) { - return GrpcSendBayernIdMessageRequest.newBuilder() - .setAttachments(GrpcAttachments.newBuilder().setAttachmentMetadata(attachmentMetadata).build()).build(); - } - - private int sendNextChunk(InputStream contentStream, CallStreamObserver<GrpcSendBayernIdMessageRequest> streamObserver) { - try { - var content = contentStream.readNBytes(chunkSize); - var size = content.length; - if (size > 0) { - streamObserver.onNext(buildRequestWithContent(content)); - } - return size; - } catch (IOException e) { - throw new TechnicalException("Error on sending a single chunk", e); - } - } - - GrpcSendBayernIdMessageRequest buildRequestWithContent(byte[] bytes) { - return GrpcSendBayernIdMessageRequest.newBuilder().setAttachments(GrpcAttachments.newBuilder().setContent(ByteString.copyFrom(bytes)).build()) - .build(); - } - - synchronized void handleFileEndReached(CallStreamObserver<GrpcSendBayernIdMessageRequest> streamObserver) { - isFinished = true; - streamObserver.onCompleted(); - } - -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension deleted file mode 100644 index 79b126e6cdb86bec1f4f08c205de8961bde1934a..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension +++ /dev/null @@ -1 +0,0 @@ -org.mockito.junit.jupiter.MockitoExtension \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/application-itcase.yml b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/application-itcase.yml deleted file mode 100644 index d4d24173ab74f278b1e07c54dc468805f8965fdc..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/application-itcase.yml +++ /dev/null @@ -1,10 +0,0 @@ -logging: - level: - ROOT: INFO - '[org.springframework]': WARN - '[de.ozgcloud]': INFO - config: classpath:log4j2-local.xml - -grpc: - server: - port: -1 diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/junit-platform.properties b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/junit-platform.properties deleted file mode 100644 index 1cebb76d5a58ac034b2627d12411d82d1e85821e..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/junit-platform.properties +++ /dev/null @@ -1 +0,0 @@ -junit.jupiter.extensions.autodetection.enabled = true \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker deleted file mode 100644 index ca6ee9cea8ec189a088d50559325d4e84ff8ad09..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +++ /dev/null @@ -1 +0,0 @@ -mock-maker-inline \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/test.pdf b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/test.pdf deleted file mode 100644 index 184dd5915515ca49dfaa8840883e6259d2a667aa..0000000000000000000000000000000000000000 Binary files a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/test.pdf and /dev/null differ diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/test.txt b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/test.txt deleted file mode 100644 index 814be41a4bbeee81df9c0f296e3fcc3a3cef33f0..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/test.txt +++ /dev/null @@ -1 +0,0 @@ -some simple text \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-interface/pom.xml b/nachrichten-bayernid-proxy/bayernid-proxy-interface/pom.xml deleted file mode 100644 index a13a3569467ee6c23ec1555ec0d047ec5ee61260..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-interface/pom.xml +++ /dev/null @@ -1,121 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - Copyright (C) 2022-2023 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. - ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>de.ozgcloud.common</groupId> - <artifactId>ozgcloud-common-dependencies</artifactId> - <version>4.0.1</version> - <relativePath/> - </parent> - - <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>bayernid-proxy-interface</artifactId> - <version>0.3.0-SNAPSHOT</version> - - <name>OZG-Cloud BayernID Proxy Interface</name> - <description>Interface (gRPC) for BayernID Proxy Service</description> - - <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> - <java.version>21</java.version> - <maven.compiler.source>${java.version}</maven.compiler.source> - <maven.compiler.target>${java.version}</maven.compiler.target> - - <find-and-replace-maven-plugin.version>1.1.0</find-and-replace-maven-plugin.version> - </properties> - - <dependencies> - <!-- GRPC --> - <dependency> - <groupId>io.grpc</groupId> - <artifactId>grpc-stub</artifactId> - </dependency> - <dependency> - <groupId>io.grpc</groupId> - <artifactId>grpc-protobuf</artifactId> - </dependency> - <dependency> - <groupId>jakarta.annotation</groupId> - <artifactId>jakarta.annotation-api</artifactId> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>com.github.os72</groupId> - <artifactId>protoc-jar-maven-plugin</artifactId> - <version>${protoc-jar-plugin.version}</version> - <executions> - <execution> - <phase>generate-sources</phase> - <goals> - <goal>run</goal> - </goals> - <configuration> - <includeMavenTypes>direct</includeMavenTypes> - <outputTargets> - <outputTarget> - <type>java</type> - </outputTarget> - <outputTarget> - <type>grpc-java</type> - <pluginArtifact>io.grpc:protoc-gen-grpc-java:${protoc-gen.version}</pluginArtifact> - </outputTarget> - </outputTargets> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>io.github.floverfelt</groupId> - <artifactId>find-and-replace-maven-plugin</artifactId> - <version>${find-and-replace-maven-plugin.version}</version> - <executions> - <execution> - <id>exec</id> - <phase>process-sources</phase> - <goals> - <goal>find-and-replace</goal> - </goals> - <configuration> - <replacementType>file-contents</replacementType> - <baseDir>target/generated-sources/</baseDir> - <findRegex>javax</findRegex> - <replaceValue>jakarta</replaceValue> - <recursive>true</recursive> - <fileMask>.java</fileMask> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> -</project> \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-interface/src/main/protobuf/bayernidproxy.model.proto b/nachrichten-bayernid-proxy/bayernid-proxy-interface/src/main/protobuf/bayernidproxy.model.proto deleted file mode 100644 index 91ed9ee0ab3f2db2c03907d0b12447fddab01bd9..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-interface/src/main/protobuf/bayernidproxy.model.proto +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.postfach.bayernid.proxy"; -option java_outer_classname = "BayernIdProxyModelProto"; - -message GrpcSendBayernIdMessageRequest { - oneof request { - GrpcBayernIdMessageMetadata messageMetadata = 1; - GrpcAttachments attachments = 2; - } -} - -message GrpcBayernIdMessageMetadata { - string messageId = 1; - string createdAt = 2; - GrpcAbsender absender = 3; - GrpcEmpfaenger empfaenger = 4; - string subject = 5; - string storkQaaLevel = 6; - string vorgangId = 7; - string text = 8; -} - -message GrpcAbsender { - string name = 1; - string anschrift = 2; - string email = 3; - string telefon = 4; - string hyperlink = 5; - string dienst = 6; - string mandant = 7; - string gemeindeschluessel = 8; -} - -message GrpcEmpfaenger { - string postkorbId = 1; - string name = 2; - string anschrift = 3; -} - -message GrpcAttachments { - oneof request { - GrpcAttachmentMetadata attachmentMetadata = 1; - bytes content = 2; - } -} - -message GrpcAttachmentMetadata { - string fileType = 1; - string fileName = 2; -} - -message GrpcSendBayernIdMessageResponse { - bool success = 1; - string status = 2; - string message = 3; -} diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-interface/src/main/protobuf/bayernproxy.proto b/nachrichten-bayernid-proxy/bayernid-proxy-interface/src/main/protobuf/bayernproxy.proto deleted file mode 100644 index 039909e0f942195f3bc600bf04746a9c8af5f1b6..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/bayernid-proxy-interface/src/main/protobuf/bayernproxy.proto +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid.proxy; - -import "bayernidproxy.model.proto"; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.postfach.bayernid.proxy"; -option java_outer_classname = "BayernIdProxyProto"; - -service BayernIdProxyService { - - rpc SendMessageAsStream(stream GrpcSendBayernIdMessageRequest) returns (GrpcSendBayernIdMessageResponse); - -} diff --git a/nachrichten-bayernid-proxy/pom.xml b/nachrichten-bayernid-proxy/pom.xml deleted file mode 100644 index 297ab93399fcecfa16072733fe5915ad84039b09..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/pom.xml +++ /dev/null @@ -1,69 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - Copyright (C) 2022-2023 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. - ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>de.ozgcloud.common</groupId> - <artifactId>ozgcloud-common-parent</artifactId> - <version>4.0.1-SNAPSHOT</version> - <relativePath/> - </parent> - - <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>nachrichten-bayernid-proxy</artifactId> - <version>0.3.0-SNAPSHOT</version> - <packaging>pom</packaging> - - <name>OZG-Cloud BayernID Proxy</name> - <description>Proxy Service for BayernID</description> - - <modules> - <module>bayernid-proxy-impl</module> - <module>bayernid-proxy-interface</module> - </modules> - - <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> - <java.version>21</java.version> - <maven.compiler.source>${java.version}</maven.compiler.source> - <maven.compiler.target>${java.version}</maven.compiler.target> - <jaxb-maven-plugin.version>4.0.0</jaxb-maven-plugin.version> - <wiremock.version>3.5.1</wiremock.version> - </properties> - - <build> - <plugins> - <plugin> - <groupId>com.mycila</groupId> - <artifactId>license-maven-plugin</artifactId> - </plugin> - </plugins> - </build> -</project> \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/run_helm_test.sh b/nachrichten-bayernid-proxy/run_helm_test.sh deleted file mode 100755 index 21019cc23dab325f1ec88421dc73caa849af660f..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/run_helm_test.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -set -e - -helm template ./src/main/helm/ -f src/test/helm-linter-values.yaml -helm lint -f src/test/helm-linter-values.yaml ./src/main/helm/ -cd src/main/helm && helm unittest -f '../../test/helm/*.yaml' . - diff --git a/nachrichten-bayernid-proxy/src/main/helm/.helmignore b/nachrichten-bayernid-proxy/src/main/helm/.helmignore deleted file mode 100644 index 3d0dbe446770be5127eb719b695414c427b09715..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/main/helm/.helmignore +++ /dev/null @@ -1 +0,0 @@ -tests/ \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/main/helm/Chart.yaml b/nachrichten-bayernid-proxy/src/main/helm/Chart.yaml deleted file mode 100644 index b04099d33913b9524a729a95a20dc769f5663839..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/main/helm/Chart.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -apiVersion: v1 -appVersion: "1.0" -description: A Helm chart for Bayernid-Proxy -name: bayernid-proxy -version: 0.0.0-MANAGED-BY-JENKINS -icon: https://simpleicons.org/icons/helm.svg diff --git a/nachrichten-bayernid-proxy/src/main/helm/templates/_helpers.tpl b/nachrichten-bayernid-proxy/src/main/helm/templates/_helpers.tpl deleted file mode 100644 index 0ea6c8d8c9dd30157cc593c949f47a7be8a738a2..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/main/helm/templates/_helpers.tpl +++ /dev/null @@ -1,47 +0,0 @@ - -{{/* Default Labels: Helm recommended best-practice labels https://helm.sh/docs/chart_best_practices/labels/ */}} -{{- define "app.defaultLabels" }} -app.kubernetes.io/instance: bayernid-proxy -app.kubernetes.io/managed-by: {{ .Release.Service }} -app.kubernetes.io/name: {{ .Release.Name }} -app.kubernetes.io/namespace: {{ .Release.Namespace }} -app.kubernetes.io/part-of: ozgcloud -app.kubernetes.io/version: {{ .Chart.Version }} -helm.sh/chart: {{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" }} -app.kubernetes.io/component: bayernid-proxy -component: bayernid-proxy -{{- end -}} - -{{- define "app.matchLabels" }} -app.kubernetes.io/name: {{ .Release.Name }} -app.kubernetes.io/namespace: {{ .Release.Namespace }} -component: bayernid-proxy -{{- end -}} - -{{- define "app.envSpringProfiles" }} -{{- if (.Values.env).overrideSpringProfiles -}} -{{ printf "%s" (.Values.env).overrideSpringProfiles }} -{{- else -}} -{{ printf "oc, %s" (include "app.ozgcloudEnvironment" . ) }} -{{- end -}} -{{- end -}} - -{{- define "app.ozgcloudEnvironment" -}} -{{- required "ozgcloud.environment muss angegeben sein" (.Values.ozgcloud).environment -}} -{{- end -}} - - -{{ define "app.zertifikatPath" }} -{{- required "ozgcloud zertifikat path muss angegeben sein" (.Values.ozgcloud).bayernid.zertifikat.path -}} -{{- end -}} - - -{{ define "app.zertifikatFilename" }} -{{- required "ozgcloud zertifikat fileName muss angegeben sein" (.Values.ozgcloud).bayernid.zertifikat.fileName -}} -{{- end -}} - - -{{- define "app.serviceAccountName" -}} -{{ printf "%s" ( (.Values.serviceAccount).name | default "bayernid-proxy-service-account" ) }} -{{- end -}} - diff --git a/nachrichten-bayernid-proxy/src/main/helm/templates/configmap_bindings_type.yaml b/nachrichten-bayernid-proxy/src/main/helm/templates/configmap_bindings_type.yaml deleted file mode 100644 index d56b2505d154567012dff38fe9ef5b50887b45a5..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/main/helm/templates/configmap_bindings_type.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -apiVersion: v1 -kind: ConfigMap -metadata: - name: bindings-type - namespace: {{ .Release.Namespace }} -data: - type: | - ca-certificates \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/main/helm/templates/deployment.yaml b/nachrichten-bayernid-proxy/src/main/helm/templates/deployment.yaml deleted file mode 100644 index b3169c97d56ffc2da535e79f0c7f929a69f2f07d..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/main/helm/templates/deployment.yaml +++ /dev/null @@ -1,166 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ .Release.Name }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "app.defaultLabels" . | indent 4 }} -spec: - progressDeadlineSeconds: 600 - replicas: {{ .Values.replicaCount }} - revisionHistoryLimit: 10 - selector: - matchLabels: - {{- include "app.matchLabels" . | indent 6 }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - template: - metadata: - labels: - {{- include "app.defaultLabels" . | indent 8 }} - spec: - {{- if (.Values.serviceAccount).create }} - serviceAccountName: {{ include "app.serviceAccountName" . }} - {{- end }} - topologySpreadConstraints: - - maxSkew: 1 - topologyKey: kubernetes.io/hostname - whenUnsatisfiable: ScheduleAnyway - labelSelector: - matchLabels: - app.kubernetes.io/name: {{ .Release.Name }} - containers: - - env: - - name: SERVICE_BINDING_ROOT - value: "/bindings" - - name: spring_profiles_active - value: {{ include "app.envSpringProfiles" . }} - - {{- with (.Values.env).customList }} -{{ toYaml . | indent 10 }} - {{- end }} - - - name: ozgcloud_bayernid_server - value: {{ required "ozgcloud.bayernid.server must be set" (.Values.ozgcloud).bayernid.server }} - - - name: spring_ssl_bundle_jks_bayern-id-ca_keystore_location - value: "/keystore/bayernid/bayern-id-ca.p12" - - name: spring_ssl_bundle_jks_bayern-id-ca_keystore_type - value: PKCS12 - - name: spring_ssl_bundle_jks_bayern-id-ca_keystore_password - valueFrom: - secretKeyRef: - name: {{ required "ozgcloud.bayernid.certificateSecretName must be set" ((.Values.ozgcloud).bayernid).certificateSecretName }} - key: password - optional: false - - image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}" - imagePullPolicy: Always - name: bayernid-proxy - ports: - - containerPort: 9090 - name: grpc-9090 - protocol: TCP - - containerPort: 8081 - name: metrics - protocol: TCP - readinessProbe: - failureThreshold: 3 - httpGet: - path: /actuator/health/readiness - port: 8081 - scheme: HTTP - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 3 - startupProbe: - httpGet: - path: /actuator/health/readiness - port: 8081 - scheme: HTTP - failureThreshold: 10 - initialDelaySeconds: 20 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - resources: - {{- with .Values.resources }} -{{ toYaml . | indent 10 }} - {{- end }} - securityContext: - allowPrivilegeEscalation: false - privileged: false - readOnlyRootFilesystem: false - runAsNonRoot: true - {{- with (.Values.securityContext).runAsUser }} - runAsUser: {{ . }} - {{- end }} - {{- with (.Values.securityContext).runAsGroup }} - runAsGroup: {{ . }} - {{- end }} - stdin: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - tty: true - volumeMounts: - - name: bindings - mountPath: "/bindings/ca-certificates/type" - subPath: type - readOnly: true - - name: bayern-id-ca - mountPath: "/keystore/bayernid/bayern-id-ca.p12" - subPath: zertifikat - readOnly: true - - name: temp-dir - mountPath: "/tmp" - - volumes: - - name: bindings - configMap: - name: bindings-type - - name: bayern-id-ca - secret: - secretName: {{ required "ozgcloud.bayernid.certificateSecretName must be set" ((.Values.ozgcloud).bayernid).certificateSecretName }} - optional: false - - name: temp-dir - emptyDir: {} - dnsConfig: {} - dnsPolicy: ClusterFirst - imagePullSecrets: - - name: {{ required "imagePullSecret must be set" .Values.imagePullSecret }} - - restartPolicy: Always - {{- with .Values.hostAliases }} - hostAliases: -{{ toYaml . | indent 8 }} - {{- end }} - schedulerName: default-scheduler - securityContext: {} - terminationGracePeriodSeconds: 30 diff --git a/nachrichten-bayernid-proxy/src/main/helm/templates/network_policy.yaml b/nachrichten-bayernid-proxy/src/main/helm/templates/network_policy.yaml deleted file mode 100644 index 95cd70f64a419cc1e585a2f977f48d45aae0eaee..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/main/helm/templates/network_policy.yaml +++ /dev/null @@ -1,72 +0,0 @@ -# -# 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. -# - -{{- if not (.Values.networkPolicy).disabled }} -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: network-policy-bayernid-proxy - namespace: {{ .Release.Namespace }} -spec: - podSelector: - matchLabels: - component: bayernid-proxy - policyTypes: - - Ingress - - Egress - ingress: - - ports: - - port: 9090 - from: - - podSelector: - matchLabels: - component: vorgang-manager -{{- with (.Values.networkPolicy).additionalIngressConfig }} -{{ toYaml . | indent 2 }} -{{- end }} -{{- with (.Values.networkPolicy).additionalIngressConfigNamespace }} -{{ toYaml . | indent 2 }} -{{- end }} - egress: - - to: - - namespaceSelector: - matchLabels: - kubernetes.io/metadata.name: {{ required "networkPolicy.dnsServerNamespace must be set" (.Values.networkPolicy).dnsServerNamespace }} - ports: - - port: 53 - protocol: UDP - - port: 53 - protocol: TCP - - port: 5353 - protocol: UDP - - port: 5353 - protocol: TCP -{{- with (.Values.networkPolicy).additionalEgressConfig }} -{{ toYaml . | indent 2 }} -{{- end }} -{{- with (.Values.networkPolicy).additionalEgressConfigNamespace }} -{{ toYaml . | indent 2 }} -{{- end }} - -{{- end }} \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/main/helm/templates/service.yaml b/nachrichten-bayernid-proxy/src/main/helm/templates/service.yaml deleted file mode 100644 index ed6467de511d8fddec146bd3fb2a96791f7f7a8f..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/main/helm/templates/service.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -apiVersion: v1 -kind: Service -metadata: - name: {{.Release.Name }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "app.defaultLabels" . | indent 4 }} -spec: - type: ClusterIP - ports: - - name: grpc-9090 - port: 9090 - protocol: TCP - - name: metrics - port: 8081 - protocol: TCP - selector: - {{- include "app.matchLabels" . | indent 4 }} diff --git a/nachrichten-bayernid-proxy/src/main/helm/templates/service_account.yaml b/nachrichten-bayernid-proxy/src/main/helm/templates/service_account.yaml deleted file mode 100644 index 231d53f52dfe67b27f474ebf552d1e10a052f042..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/main/helm/templates/service_account.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# -# 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. -# - -{{- if (.Values.serviceAccount).create }} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "app.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} -{{- end }} \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/main/helm/values.yaml b/nachrichten-bayernid-proxy/src/main/helm/values.yaml deleted file mode 100644 index 7873a672af6bddd71ca66f81988d8a80d5c0b0ca..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/main/helm/values.yaml +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (C) 2022 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. -# - - -replicaCount: 2 - - -image: - repo: docker.ozg-sh.de - name: bayernid-proxy - tag: latest # [default: latest] - - -vorgangmanagerName: vorgang-manager - -imagePullSecret: ozgcloud-image-pull-secret - - diff --git a/nachrichten-bayernid-proxy/src/test/helm-linter-values.yaml b/nachrichten-bayernid-proxy/src/test/helm-linter-values.yaml deleted file mode 100644 index 35e31ef09343dc75bec9ea0fb5712ecaf73382ca..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm-linter-values.yaml +++ /dev/null @@ -1,9 +0,0 @@ -ozgcloud: - environment: test - bayernid: - server: "https://test" - certificateSecretName: "bayernidCertificat" - -networkPolicy: - dnsServerNamespace: test-dns-namespace - diff --git a/nachrichten-bayernid-proxy/src/test/helm/configmap_bindings_type_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/configmap_bindings_type_test.yaml deleted file mode 100644 index e097f3b15d2c12e7043830c5ba2d794302f07da4..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/configmap_bindings_type_test.yaml +++ /dev/null @@ -1,48 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: Certificate ConfigMap Binding -release: - name: vorgang-manager - namespace: sh-helm-test -templates: - - templates/configmap_bindings_type.yaml -tests: - - it: validate configMap values - asserts: - - isKind: - of: ConfigMap - - isAPIVersion: - of: v1 - - equal: - path: metadata.name - value: bindings-type - - equal: - path: metadata.namespace - value: sh-helm-test - - equal: - path: data - value: - type: | - ca-certificates \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_actuator_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_actuator_test.yaml deleted file mode 100644 index 7fc4a5ff86f25c1d2dbda8e2cf0c6c068956e267..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_actuator_test.yaml +++ /dev/null @@ -1,67 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: test deployment actuator -release: - name: bayernid-proxy - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: testIsDeployment - template: deployment.yaml - asserts: - - equal: - path: spec.template.spec.containers[0].readinessProbe - value: - failureThreshold: 3 - httpGet: - path: /actuator/health/readiness - port: 8081 - scheme: HTTP - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 3 - - equal: - path: spec.template.spec.containers[0].startupProbe - value: - httpGet: - path: /actuator/health/readiness - port: 8081 - scheme: HTTP - failureThreshold: 10 - initialDelaySeconds: 20 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - - - - diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_bayernid_certificate_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_bayernid_certificate_test.yaml deleted file mode 100644 index 70bd21da3534b32163c0d61c1e0b24e6e5b993b9..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_bayernid_certificate_test.yaml +++ /dev/null @@ -1,114 +0,0 @@ -# -# 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. -# - -suite: test bayernid certificate -release: - name: bayernid-proxy - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "https://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: should contains bayernid server - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_bayernid_server - value: "https://test" - - - it: should fail when bayernid server not set - set: - ozgcloud: - environment: dev - bayernid: - server: "" - asserts: - - failedTemplate: - errorMessage: "ozgcloud.bayernid.server must be set" - - - - it: should set variable keystore certificate - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: spring_ssl_bundle_jks_bayern-id-ca_keystore_location - value: /keystore/bayernid/bayern-id-ca.p12 - - - it: should set variable keystore type - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: spring_ssl_bundle_jks_bayern-id-ca_keystore_type - value: PKCS12 - - - it: should set variable keystore password secret reference - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: spring_ssl_bundle_jks_bayern-id-ca_keystore_password - valueFrom: - secretKeyRef: - name: bayernidCertificat - key: password - optional: false - - - it: should fail when secret name for bayernid certificat is not set - set: - ozgcloud: - environment: dev - bayernid: - server: "bayernIdServer" - certificateSecretName: - asserts: - - failedTemplate: - errorMessage: "ozgcloud.bayernid.certificateSecretName must be set" - - - it: should have volumeMount for bayernid certificate keystore - asserts: - - contains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: bayern-id-ca - mountPath: "/keystore/bayernid/bayern-id-ca.p12" - subPath: zertifikat - readOnly: true - - - it: should have volume for bayernid certificate keystore - asserts: - - contains: - path: spec.template.spec.volumes - content: - name: bayern-id-ca - secret: - secretName: bayernidCertificat - optional: false \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_bindings_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_bindings_test.yaml deleted file mode 100644 index cc051bf7be028d28fa6015d6a63ba39af6637da0..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_bindings_test.yaml +++ /dev/null @@ -1,72 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: deployment bayernid-proxy bindings -release: - name: bayernid-proxy - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: should have volumeMounts for temp folder - asserts: - - contains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: temp-dir - mountPath: "/tmp" - - - it: should have volume for temp folder - asserts: - - contains: - path: spec.template.spec.volumes - content: - name: temp-dir - emptyDir: {} - - - it: should have bindings-type volume - asserts: - - contains: - path: spec.template.spec.volumes - content: - name: bindings - configMap: - name: bindings-type - - - it: should have bindings-type volumeMount - asserts: - - contains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: bindings - mountPath: "/bindings/ca-certificates/type" - subPath: type - readOnly: true - \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_container_basic_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_container_basic_test.yaml deleted file mode 100644 index 0da62e9e3341fbf78b3434d257fdf8b2a1fdffc2..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_container_basic_test.yaml +++ /dev/null @@ -1,64 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: test deployment container basics -release: - name: bayernid-proxy - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: should have correct values for container image, name, imagePullPolicy - asserts: - - equal: - path: spec.template.spec.containers[0].image - value: docker.ozg-sh.de/bayernid-proxy:latest - - equal: - path: spec.template.spec.containers[0].name - value: bayernid-proxy - - equal: - path: spec.template.spec.containers[0].imagePullPolicy - value: Always - - it: should have correct values for container ports - asserts: - - contains: - path: spec.template.spec.containers[0].ports - content: - containerPort: 9090 - name: grpc-9090 - protocol: TCP - - contains: - path: spec.template.spec.containers[0].ports - content: - containerPort: 8081 - name: metrics - protocol: TCP - - diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_container_other_values_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_container_other_values_test.yaml deleted file mode 100644 index 8daa93f0c87ba344c70622e885c22a92a461f100..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_container_other_values_test.yaml +++ /dev/null @@ -1,52 +0,0 @@ - - # -# Copyright (C) 2022 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. -# - -suite: test deployment container other values -release: - name: bayernid-proxy - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: should have correct values for container terminationMessagePolicy, terminationMessagePath, stdin, tty - asserts: - - equal: - path: spec.template.spec.containers[0].terminationMessagePolicy - value: File - - equal: - path: spec.template.spec.containers[0].terminationMessagePath - value: /dev/termination-log - - equal: - path: spec.template.spec.containers[0].stdin - value: true - - equal: - path: spec.template.spec.containers[0].tty - value: true \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_container_security_context_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_container_security_context_test.yaml deleted file mode 100644 index 5b6103b0ef2624acd8f70ffab8a370ec28401ba3..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_container_security_context_test.yaml +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: test deployment container security context -release: - name: bayernid-proxy - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: check default values - asserts: - - equal: - path: spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation - value: false - - equal: - path: spec.template.spec.containers[0].securityContext.privileged - value: false - - equal: - path: spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem - value: false - - equal: - path: spec.template.spec.containers[0].securityContext.runAsNonRoot - value: true - - isNull: - path: spec.template.spec.containers[0].securityContext.runAsUser - - isNull: - path: spec.template.spec.containers[0].securityContext.runAsGroup - - it: check runAsUser - set: - securityContext.runAsUser: 1000 - asserts: - - equal: - path: spec.template.spec.containers[0].securityContext.runAsUser - value: 1000 - - it: check runAsGroup - set: - securityContext.runAsGroup: 1000 - asserts: - - equal: - path: spec.template.spec.containers[0].securityContext.runAsGroup - value: 1000 \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_defaults_labels_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_defaults_labels_test.yaml deleted file mode 100644 index 3e4455daed36fc9aadd506f6599b4c9c3a266f33..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_defaults_labels_test.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: test deployment default labels -release: - name: bayernid-proxy - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: check metadata.labels - asserts: - - equal: - path: metadata.labels - value: - app.kubernetes.io/instance: bayernid-proxy - app.kubernetes.io/managed-by: Helm - app.kubernetes.io/name: bayernid-proxy - app.kubernetes.io/namespace: sh-helm-test - app.kubernetes.io/part-of: ozgcloud - app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS - helm.sh/chart: bayernid-proxy-0.0.0-MANAGED-BY-JENKINS - app.kubernetes.io/component: bayernid-proxy - component: bayernid-proxy - - - it: should set spec.selector.matchLabels - asserts: - - equal: - path: spec.selector.matchLabels - value: - app.kubernetes.io/name: bayernid-proxy - app.kubernetes.io/namespace: sh-helm-test - component: bayernid-proxy - - - it: should have correct deyploment spec.template.metadata.labels - asserts: - - equal: - path: spec.template.metadata.labels - value: - app.kubernetes.io/instance: bayernid-proxy - app.kubernetes.io/managed-by: Helm - app.kubernetes.io/name: bayernid-proxy - app.kubernetes.io/namespace: sh-helm-test - app.kubernetes.io/part-of: ozgcloud - app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS - helm.sh/chart: bayernid-proxy-0.0.0-MANAGED-BY-JENKINS - app.kubernetes.io/component: bayernid-proxy - component: bayernid-proxy diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_env_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_env_test.yaml deleted file mode 100644 index f94cc7c236928bbadcecf08ae2bef51a637d23db..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_env_test.yaml +++ /dev/null @@ -1,53 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: test deployment container environments -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "https://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: check customList - set: - env.customList: - - name: my_test_environment_name - value: "A test value" - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: my_test_environment_name - value: "A test value" - - - it: check customList test value is not set by default - asserts: - - notContains: - path: spec.template.spec.containers[0].env - content: - name: my_test_environment_name - value: "A test value" diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_imagepull_secret_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_imagepull_secret_test.yaml deleted file mode 100644 index 69c1d1b6257a53596e6ab523422932fe5d61e41a..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_imagepull_secret_test.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: test deployment image pull secret -release: - name: bayernid-proxy - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: should use correct imagePull secret - asserts: - - equal: - path: spec.template.spec.imagePullSecrets[0].name - value: ozgcloud-image-pull-secret \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_ozgcloud_base_values_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_ozgcloud_base_values_test.yaml deleted file mode 100644 index 00a0300659c67b9e1927870f63dcf26fe31321ee..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_ozgcloud_base_values_test.yaml +++ /dev/null @@ -1,46 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: test ozgcloud base values -release: - name: bayernid-proxy - namespace: sh-helm-test -templates: - - templates/deployment.yaml - -tests: - - - it: should fail on missing environment - asserts: - - failedTemplate: - errorMessage: ozgcloud.environment muss angegeben sein - - it: should not fail on not missing environment - set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" - asserts: - - notFailedTemplate: {} diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_resources_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_resources_test.yaml deleted file mode 100644 index cb794dac0ffaff7f164ede6eb5193e6dc3ca0743..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_resources_test.yaml +++ /dev/null @@ -1,63 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: test deployment container resources -release: - name: bayernid-proxy -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: should generate resources when values set - set: - resources: - limits: - cpu: 11m - memory: 22Mi - requests: - cpu: 33m - memory: 44Mi - asserts: - - equal: - path: spec.template.spec.containers[0].resources.limits.cpu - value: 11m - - equal: - path: spec.template.spec.containers[0].resources.limits.memory - value: 22Mi - - equal: - path: spec.template.spec.containers[0].resources.requests.cpu - value: 33m - - equal: - path: spec.template.spec.containers[0].resources.requests.memory - value: 44Mi - - it: should not generate resources when values not set - asserts: - - isEmpty: - path: spec.template.spec.containers[0].resources - diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_service_account_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_service_account_test.yaml deleted file mode 100644 index 334d3f74c55057973868eefe40e1977ffe32b7de..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_service_account_test.yaml +++ /dev/null @@ -1,57 +0,0 @@ -# -# 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. -# - -suite: deployment service account -release: - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: should use service account with default name - set: - serviceAccount: - create: true - asserts: - - equal: - path: spec.template.spec.serviceAccountName - value: bayernid-proxy-service-account - - it: should use service account with name - set: - serviceAccount: - create: true - name: helm-service-account - asserts: - - equal: - path: spec.template.spec.serviceAccountName - value: helm-service-account - - it: should use default service account - asserts: - - isNull: - path: spec.template.spec.serviceAccountName \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_springProfile_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_springProfile_test.yaml deleted file mode 100644 index 70df4d35ce94b1fc4cd33fdaf7fd4752e8991435..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_springProfile_test.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: test deployment spring profiles -release: - name: bayernid-proxy -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: should override spring profiles - set: - env.overrideSpringProfiles: oc,stage,ea - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: spring_profiles_active - value: oc,stage,ea - - it: should generate spring profiles - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: spring_profiles_active - value: oc, dev \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_template_other_values_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_template_other_values_test.yaml deleted file mode 100644 index 9d9aff7d253c6a5151a768ccbe5e38c0ffb2b7fa..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deployment_template_other_values_test.yaml +++ /dev/null @@ -1,81 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: test deployment template other values -release: - name: bayernid-proxy - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" -tests: - - it: should have correct spec.template.spec.topologySpreadConstraints values - asserts: - - contains: - path: spec.template.spec.topologySpreadConstraints - content: - maxSkew: 1 - topologyKey: kubernetes.io/hostname - whenUnsatisfiable: ScheduleAnyway - labelSelector: - matchLabels: - app.kubernetes.io/name: bayernid-proxy - - it: should have correct deployment spec.template.spec.dnsConfig dnsPolicy restartPolicy schedulerName and terminationGracePeriodSeconds values - asserts: - - equal: - path: spec.template.spec.dnsConfig - value: {} - - equal: - path: spec.template.spec.dnsPolicy - value: ClusterFirst - - equal: - path: spec.template.spec.restartPolicy - value: Always - - equal: - path: spec.template.spec.terminationGracePeriodSeconds - value: 30 - - equal: - path: spec.template.spec.schedulerName - value: default-scheduler - - it: should not generate spec.template.spec.hostAlias when values set - set: - hostAliases: test-alias - asserts: - - equal: - path: spec.template.spec.hostAliases - value: test-alias - - - - it: should not generate spec.template.spec.hostAlias when values not set - asserts: - - isNull: - path: spec.template.spec.hostAliases - - - diff --git a/nachrichten-bayernid-proxy/src/test/helm/deyploment_general_value_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deyploment_general_value_test.yaml deleted file mode 100644 index 53eadc8ef118fcf0177192a5fa14f1cf1fafe6a1..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/deyploment_general_value_test.yaml +++ /dev/null @@ -1,78 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: test deployment general values -release: - name: bayernid-proxy - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: dev - bayernid: - server: "http://test" - certificateSecretName: "bayernidCertificat" - -tests: - - it: should have correct apiVersion - asserts: - - isKind: - of: Deployment - - isAPIVersion: - of: "apps/v1" - - - - it: should have correct deployment metadata - asserts: - - equal: - path: metadata.name - value: bayernid-proxy - - equal: - path: metadata.namespace - value: sh-helm-test - - - - it: should have correct deyployment general spec values - asserts: - - equal: - path: spec.progressDeadlineSeconds - value: 600 - - equal: - path: spec.replicas - value: 2 - - equal: - path: spec.revisionHistoryLimit - value: 10 - - it: should have correct deployment spec strategy values - asserts: - - equal: - path: spec.strategy - value: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - - diff --git a/nachrichten-bayernid-proxy/src/test/helm/network_policy_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/network_policy_test.yaml deleted file mode 100644 index 6942329e62a7ca2a0544cc56d6f3d6d76e9b2120..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/network_policy_test.yaml +++ /dev/null @@ -1,183 +0,0 @@ -# -# 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. -# - -suite: network policy test -release: - namespace: by-helm-test -templates: - - templates/network_policy.yaml -tests: - - it: should match apiVersion - set: - networkPolicy: - dnsServerNamespace: test-dns-namespace - asserts: - - isAPIVersion: - of: networking.k8s.io/v1 - - - it: should match kind - set: - networkPolicy: - dnsServerNamespace: test-dns-namespace - asserts: - - isKind: - of: NetworkPolicy - - - it: should match metadata - set: - networkPolicy: - dnsServerNamespace: test-dns-namespace - asserts: - - equal: - path: metadata - value: - name: network-policy-bayernid-proxy - namespace: by-helm-test - - - it: should generate spec - set: - networkPolicy: - dnsServerNamespace: test-dns-namespace - asserts: - - equal: - path: spec - value: - podSelector: - matchLabels: - component: bayernid-proxy - policyTypes: - - Ingress - - Egress - ingress: - - ports: - - port: 9090 - from: - - podSelector: - matchLabels: - component: vorgang-manager - egress: - - to: - - namespaceSelector: - matchLabels: - kubernetes.io/metadata.name: test-dns-namespace - ports: - - port: 53 - protocol: UDP - - port: 53 - protocol: TCP - - port: 5353 - protocol: UDP - - port: 5353 - protocol: TCP - - - it: should add additionalIngressConfig - set: - networkPolicy: - dnsServerNamespace: test-dns-namespace - additionalIngressConfig: - - from: - - podSelector: - matchLabels: - additionalIngressConfig: yes - asserts: - - contains: - path: spec.ingress - content: - from: - - podSelector: - matchLabels: - additionalIngressConfig: yes - - - it: should add additionalEgressConfig - set: - networkPolicy: - dnsServerNamespace: test-dns-namespace - additionalEgressConfig: - - to: - - podSelector: - matchLabels: - additionalEgressConfig: yes - asserts: - - contains: - path: spec.egress - content: - to: - - podSelector: - matchLabels: - additionalEgressConfig: yes - - - - it: should add additionalIngressConfigNamespace - set: - networkPolicy: - dnsServerNamespace: test-dns-namespace - additionalIngressConfigNamespace: - - from: - - podSelector: - matchLabels: - additionalIngressConfigNamespace: yes - asserts: - - contains: - path: spec.ingress - content: - from: - - podSelector: - matchLabels: - additionalIngressConfigNamespace: yes - - - it: should add additionalEgressConfigNamespace - set: - networkPolicy: - dnsServerNamespace: test-dns-namespace - additionalEgressConfigNamespace: - - to: - - podSelector: - matchLabels: - additionalEgressConfigNamespace: yes - asserts: - - contains: - path: spec.egress - content: - to: - - podSelector: - matchLabels: - additionalEgressConfigNamespace: yes - - - it: test network policy disabled - set: - networkPolicy: - disabled: true - dnsServerNamespace: test-dns-namespace - asserts: - - hasDocuments: - count: 0 - - - it: test network policy unset should be disabled - set: - networkPolicy: - disabled: false - dnsServerNamespace: test-dns-namespace - asserts: - - hasDocuments: - count: 1 \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/test/helm/service_account_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/service_account_test.yaml deleted file mode 100644 index 41565540d17ddc7998397ff62407b0e5bdf7c249..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/service_account_test.yaml +++ /dev/null @@ -1,65 +0,0 @@ -# -# 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. -# - -suite: test service account -release: - namespace: sh-helm-test -templates: - - templates/service_account.yaml -tests: - - it: should create service account with default name - set: - serviceAccount: - create: true - asserts: - - isKind: - of: ServiceAccount - - isAPIVersion: - of: v1 - - equal: - path: metadata.name - value: bayernid-proxy-service-account - - equal: - path: metadata.namespace - value: sh-helm-test - - - it: should create service account with name - set: - serviceAccount: - create: true - name: helm-service-account - asserts: - - isKind: - of: ServiceAccount - - equal: - path: metadata.name - value: helm-service-account - - equal: - path: metadata.namespace - value: sh-helm-test - - - it: should not create service account - asserts: - - hasDocuments: - count: 0 \ No newline at end of file diff --git a/nachrichten-bayernid-proxy/src/test/helm/service_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/service_test.yaml deleted file mode 100644 index 533bdd32b941ed3982480d0198f9941b81b80f2f..0000000000000000000000000000000000000000 --- a/nachrichten-bayernid-proxy/src/test/helm/service_test.yaml +++ /dev/null @@ -1,85 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -suite: test service -release: - name: bayernid-proxy - namespace: sh-helm-test -templates: - - templates/service.yaml -tests: - - it: should have the label component with correct value - asserts: - - isKind: - of: Service - - isAPIVersion: - of: v1 - - equal: - path: metadata.labels.component - value: bayernid-proxy - - it: should be of type ClusterIP - asserts: - - equal: - path: spec.type - value: ClusterIP - - it: ports should contain the grpc port - asserts: - - contains: - path: spec.ports - content: - name: grpc-9090 - port: 9090 - protocol: TCP - count: 1 - any: true - - it: ports should contain the metrics port - asserts: - - contains: - path: spec.ports - content: - name: metrics - port: 8081 - protocol: TCP - count: 1 - any: true - - it: selector should contain the component label with correct value - asserts: - - equal: - path: spec.selector.component - value: bayernid-proxy - - - it: selector should contain helm recommended labels name and namespace - asserts: - - equal: - path: spec.selector - value: - app.kubernetes.io/name: bayernid-proxy - app.kubernetes.io/namespace: sh-helm-test - component: bayernid-proxy - - - it: check component label for service - asserts: - - equal: - path: metadata.labels["component"] - value: bayernid-proxy \ No newline at end of file diff --git a/nachrichten-manager/lombok.config b/nachrichten-manager/lombok.config deleted file mode 100644 index d07dd9b0e2b0281fbf514a968b9451cb6af62f93..0000000000000000000000000000000000000000 --- a/nachrichten-manager/lombok.config +++ /dev/null @@ -1,30 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -lombok.log.fieldName=LOG -lombok.log.slf4j.flagUsage = ERROR -lombok.log.log4j.flagUsage = ERROR -lombok.data.flagUsage = ERROR -lombok.nonNull.exceptionType = IllegalArgumentException -lombok.addLombokGeneratedAnnotation = true \ No newline at end of file diff --git a/nachrichten-manager/pom.xml b/nachrichten-manager/pom.xml deleted file mode 100644 index aeaac44692b56cda777a843885651a86dddccb0c..0000000000000000000000000000000000000000 --- a/nachrichten-manager/pom.xml +++ /dev/null @@ -1,349 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - Copyright (C) 2022-2023 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. - ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>de.ozgcloud.common</groupId> - <artifactId>ozgcloud-common-parent</artifactId> - <version>4.0.1-SNAPSHOT</version> - <relativePath/> - </parent> - - <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>nachrichten-manager</artifactId> - <version>2.6.0-SNAPSHOT</version> - <name>OZG-Cloud Nachrichten Manager</name> - - <properties> - <java.version>17</java.version> - <!-- TODO version management --> - <shedlock.version>4.25.0</shedlock.version> - <logcaptor.version>2.7.10</logcaptor.version> - <ozgcloud.license.version>1.3.0</ozgcloud.license.version> - <jaxb-maven-plugin.version>3.0.1</jaxb-maven-plugin.version> - <ozg-info-manager-interface.version>0.10.0-22.8503e49-20240124.071709-1</ozg-info-manager-interface.version> - <bayernid-proxy-interface.version>0.1.0</bayernid-proxy-interface.version> - </properties> - - <repositories> - <repository> - <id>shibboleth-releases</id> - <name>Shibboleth Releases Repository</name> - <url>https://build.shibboleth.net/maven/releases/</url> - <releases> - <enabled>true</enabled> - <checksumPolicy>warn</checksumPolicy> - </releases> - <snapshots> - <enabled>false</enabled> - </snapshots> - </repository> - <repository> - <id>shibboleth-thirdparty</id> - <name>Shibboleth Thirdparty Repository</name> - <url>https://build.shibboleth.net/maven/thirdparty/</url> - <releases> - <enabled>true</enabled> - <checksumPolicy>fail</checksumPolicy> - </releases> - <snapshots> - <enabled>false</enabled> - </snapshots> - </repository> - </repositories> - - <dependencies> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-base</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-interface</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>de.ozgcloud.command</groupId> - <artifactId>command-manager</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-utils</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>bayernid-proxy-interface</artifactId> - <version>${bayernid-proxy-interface.version}</version> - </dependency> - - <dependency> - <groupId>com.mgmtp.bup.ozg</groupId> - <artifactId>ozg-info-manager-interface</artifactId> - <version>${ozg-info-manager-interface.version}</version> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-mail</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-json</artifactId> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-web</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web-services</artifactId> - </dependency> - - <dependency> - <groupId>org.glassfish.jaxb</groupId> - <artifactId>jaxb-runtime</artifactId> - </dependency> - - <dependency> - <groupId>net.javacrumbs.shedlock</groupId> - <artifactId>shedlock-spring</artifactId> - <version>${shedlock.version}</version> - </dependency> - <dependency> - <groupId>net.javacrumbs.shedlock</groupId> - <artifactId>shedlock-provider-mongo</artifactId> - <version>${shedlock.version}</version> - </dependency> - - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-saml2-service-provider</artifactId> - </dependency> - - - <dependency> - <groupId>net.devh</groupId> - <artifactId>grpc-server-spring-boot-starter</artifactId> - </dependency> - <dependency> - <groupId>net.devh</groupId> - <artifactId>grpc-client-spring-boot-starter</artifactId> - </dependency> - - <!-- commons --> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-lang3</artifactId> - </dependency> - <dependency> - <groupId>org.apache.httpcomponents.client5</groupId> - <artifactId>httpclient5</artifactId> - </dependency> - <dependency> - <groupId>commons-beanutils</groupId> - <artifactId>commons-beanutils</artifactId> - </dependency> - - <!-- DEV --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-devtools</artifactId> - <scope>runtime</scope> - <optional>true</optional> - </dependency> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <optional>true</optional> - <scope>provided</scope> - </dependency> - - <!-- TEST --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-configuration-processor</artifactId> - <optional>true</optional> - </dependency> - <dependency> - <groupId>io.github.hakky54</groupId> - <artifactId>logcaptor</artifactId> - <version>${logcaptor.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-base</artifactId> - <version>${project.version}</version> - <type>test-jar</type> - <scope>test</scope> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <configuration> - <skip>true</skip> - </configuration> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>test-jar</goal> - </goals> - </execution> - </executions> - </plugin> - - <plugin> - <groupId>org.jvnet.jaxb</groupId> - <artifactId>jaxb-maven-plugin</artifactId> - <version>${jaxb-maven-plugin.version}</version> - <configuration> - <schemas> - <schema> - <fileset> - <directory>${basedir}/src/main/resources/bayernid</directory> - <includes> - <include>*.wsdl</include> - </includes> - </fileset> - </schema> - <schema> - <fileset> - <directory>${basedir}/src/main/resources/bayernid</directory> - <includes> - <include>*.xsd</include> - </includes> - </fileset> - </schema> - </schemas> - <episode>false</episode> - </configuration> - <executions> - <execution> - <goals> - <goal>generate</goal> - </goals> - </execution> - </executions> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - </plugin> - - <plugin> - <groupId>org.sonarsource.scanner.maven</groupId> - <artifactId>sonar-maven-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - </plugin> - - <plugin> - <groupId>com.mycila</groupId> - <artifactId>license-maven-plugin</artifactId> - <configuration> - <mapping> - <config>SCRIPT_STYLE</config> - </mapping> - <licenseSets> - <licenseSet> - <header>license/eupl_v1_2_de/header.txt</header> - <excludes> - <exclude>**/README</exclude> - <exclude>src/test/resources/**</exclude> - <exclude>src/main/resources/**</exclude> - </excludes> - </licenseSet> - </licenseSets> - </configuration> - <dependencies> - <dependency> - <groupId>de.ozgcloud.common</groupId> - <artifactId>ozgcloud-common-license</artifactId> - <version>${ozgcloud.license.version}</version> - </dependency> - </dependencies> - </plugin> - </plugins> - </build> - - <distributionManagement> - <repository> - <id>ozg-nexus</id> - <name>ozg-releases</name> - <url>https://nexus.ozg-sh.de/repository/ozg-releases/</url> - </repository> - <snapshotRepository> - <id>ozg-snapshots-nexus</id> - <name>ozg-snapshots</name> - <url>https://nexus.ozg-sh.de/repository/ozg-snapshots/</url> - </snapshotRepository> - </distributionManagement> -</project> diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerProperties.java deleted file mode 100644 index 0592f801054c7d45d99648fe7ffe10c4782a35e8..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerProperties.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.nachrichten; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Configuration -@ConfigurationProperties(prefix = "ozgcloud.nachrichten-manager") -@Setter -@Getter -public class NachrichtenManagerProperties { - - private String url; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java deleted file mode 100644 index 4921595ed99fe131abde54ebfccb4f42ad2a8d3e..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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.nachrichten.antragraum; - -import org.apache.commons.lang3.NotImplementedException; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; - -import de.ozgcloud.vorgang.grpc.command.GrpcCommand; -import io.grpc.stub.StreamObserver; -import lombok.RequiredArgsConstructor; -import net.devh.boot.grpc.server.service.GrpcService; - -@GrpcService -@RequiredArgsConstructor -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -class AntragraumGrpcService extends AntragraumServiceGrpc.AntragraumServiceImplBase { - private final AntragraumService antragraumService; - private final AntragraumNachrichtMapper mapper; - - @Override - public void findRueckfragen(GrpcFindRueckfragenRequest request, StreamObserver<GrpcFindRueckfragenResponse> streamObserver) { - var rueckfragen = antragraumService.findRueckfragen(request.getSamlToken()).map(mapper::toGrpc).toList(); - var response = GrpcFindRueckfragenResponse.newBuilder().addAllRueckfrage(rueckfragen).build(); - - streamObserver.onNext(response); - streamObserver.onCompleted(); - } - - @Override - public void sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequest request, StreamObserver<GrpcCommand> streamObserver) { - var answer = request.getAnswer(); - - var commandId = antragraumService.sendRueckfrageAnswer(request.getSamlToken(), answer.getRueckfrageId(), mapper.toPostfachNachricht(answer)); - - streamObserver.onNext(GrpcCommand.newBuilder().setId(commandId).build()); - streamObserver.onCompleted(); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java deleted file mode 100644 index cb54984efbb573241ed2aeca1fc2f08fc56d2e8e..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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.nachrichten.antragraum; - -import org.mapstruct.CollectionMappingStrategy; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.NullValueCheckStrategy; - -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; - -@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) -interface AntragraumNachrichtMapper { - String DEFAULT_STATUS = "NEU"; - - @Mapping(source = "sentAt", target = "sentAt", dateFormat = "yyyy-MM-dd'T'HH:mm:ss") - @Mapping(source = "mailBody", target = "text") - @Mapping(source = "subject", target = "vorgangName") - @Mapping(source = "attachments", target = "attachmentFileIdList") - @Mapping(target = "status", constant = DEFAULT_STATUS) - GrpcRueckfrage toGrpc(PostfachNachricht postfachNachricht); - - @Mapping(target = "mailBody", source = "answerText") - @Mapping(target = "attachments", source = "attachmentFileIdList") - @Mapping(target = "createdAt", ignore = true) - @Mapping(target = "createdBy", ignore = true) - @Mapping(target = "direction", ignore = true) - @Mapping(target = "id", ignore = true) - @Mapping(target = "messageCode", ignore = true) - @Mapping(target = "messageId", source = "rueckfrageId") - @Mapping(target = "postfachAddress", ignore = true) - @Mapping(target = "postfachId", ignore = true) - @Mapping(target = "replyOption", ignore = true) - @Mapping(target = "sentAt", ignore = true) - @Mapping(target = "sentSuccessful", ignore = true) - @Mapping(target = "subject", ignore = true) - @Mapping(target = "vorgangId", ignore = true) - PostfachNachricht toPostfachNachricht(GrpcRueckfrageAnswer answer); -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumProperties.java deleted file mode 100644 index 9db391f6c208a0aa6c1c1849d9a6c588a031ceb2..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumProperties.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.nachrichten.antragraum; - -import jakarta.validation.constraints.NotEmpty; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.Resource; -import org.springframework.validation.annotation.Validated; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -@ConfigurationProperties(prefix = "ozgcloud.antragraum") -@Validated -public class AntragraumProperties { - - public static final String PROPERTY_ANTRAGSRAUM_URL = "ozgcloud.antragraum.url"; - - @NotEmpty - private String url; - - /** - * The entityId as defined the BayernId SAML Metadata - */ - @NotEmpty - private String entityId; - /** - * The uri where to load the idp Metadata from - */ - private Resource metadataUri; - /** - * The location of the private key for decrypting the saml token data - */ - private Resource decryptionPrivateKey; - /** - * The location of the certificate for decrypting the saml token data - */ - private Resource decryptionCertificate; - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java deleted file mode 100644 index 3d9ea7abd01eaa507573d2614f599654e0e2bfbf..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * 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.nachrichten.antragraum; - -import static java.util.Objects.*; - -import java.util.stream.Stream; - -import org.apache.commons.collections.CollectionUtils; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Service; - -import de.ozgcloud.nachrichten.NachrichtenManagerProperties; -import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import jakarta.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -public class AntragraumService { - private final PersistPostfachNachrichtService postfachNachrichtService; - private final Saml2Verifier verifier; - private final Saml2Parser parser; - private final Saml2Decrypter decrypter; - - static final String USER_NOTIFICATION_TEMPLATE = """ - Guten Tag, - - bei der Bearbeitung Ihres Antrags hat sich eine Rückfrage ergeben. Bitte beantworten Sie diese im Antragsraum: - - %s - - Vielen Dank, - Ihre digitale Verwaltung - """; - - private final AntragraumProperties properties; - private final NachrichtenManagerProperties nachrichtenManagerProperties; - - @PostConstruct - void init() { - if (isNull(nachrichtenManagerProperties.getUrl())) { - throw new IllegalStateException("Address of Nachrichten-Manager is not set"); - } - } - - public String getAntragsraumUrl() { - return properties.getUrl(); - } - - public String getUserNotificationText() { - return USER_NOTIFICATION_TEMPLATE.formatted(getAntragsraumUrl()); - } - - public Stream<PostfachNachricht> findRueckfragen(String samlToken) { - verifyToken(samlToken); - var postfachId = decrypter.decryptPostfachId(parser.parse(samlToken)); - - return postfachNachrichtService.findRueckfragen(postfachId); - } - - public Stream<PostfachNachricht> findRueckfrageAnswers(String rueckfrageId) { - return postfachNachrichtService.findAnswers(rueckfrageId); - } - - public String sendRueckfrageAnswer(String samlToken, String rueckfrageId, PostfachNachricht nachricht) { - verifyToken(samlToken); - - return postfachNachrichtService.persistAnswer(rueckfrageId, nachricht); - } - - void verifyToken(String token) { - var errors = verifier.verify(token); - if (CollectionUtils.isNotEmpty(errors)) { - throw new SecurityException("SAML Token verification failed. Errors: %s".formatted(errors)); - } - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfiguration.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfiguration.java deleted file mode 100644 index 0961155476fed54722e9572435b34c5225e67e80..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfiguration.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * 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.nachrichten.antragraum; - -import java.io.IOException; -import java.io.InputStream; -import java.security.cert.CertificateException; -import java.security.cert.CertificateFactory; -import java.security.cert.X509Certificate; -import java.security.interfaces.RSAPrivateKey; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import jakarta.annotation.PostConstruct; - -import org.opensaml.core.config.ConfigurationService; -import org.opensaml.core.config.InitializationService; -import org.opensaml.core.criterion.EntityIdCriterion; -import org.opensaml.core.xml.XMLObject; -import org.opensaml.core.xml.config.XMLObjectProviderRegistry; -import org.opensaml.saml.common.xml.SAMLConstants; -import org.opensaml.saml.criterion.ProtocolCriterion; -import org.opensaml.saml.metadata.criteria.role.impl.EvaluableProtocolRoleDescriptorCriterion; -import org.opensaml.saml.saml2.metadata.EntitiesDescriptor; -import org.opensaml.saml.saml2.metadata.EntityDescriptor; -import org.opensaml.saml.saml2.metadata.KeyDescriptor; -import org.opensaml.security.credential.Credential; -import org.opensaml.security.credential.CredentialResolver; -import org.opensaml.security.credential.UsageType; -import org.opensaml.security.credential.criteria.impl.EvaluableEntityIDCredentialCriterion; -import org.opensaml.security.credential.criteria.impl.EvaluableUsageCredentialCriterion; -import org.opensaml.security.credential.impl.CollectionCredentialResolver; -import org.opensaml.security.criteria.UsageCriterion; -import org.opensaml.security.x509.BasicX509Credential; -import org.opensaml.xmlsec.config.impl.DefaultSecurityConfigurationBootstrap; -import org.opensaml.xmlsec.keyinfo.KeyInfoSupport; -import org.opensaml.xmlsec.signature.support.SignatureTrustEngine; -import org.opensaml.xmlsec.signature.support.impl.ExplicitKeySignatureTrustEngine; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.Resource; -import org.springframework.security.converter.RsaKeyConverters; -import org.springframework.security.saml2.Saml2Exception; -import org.springframework.security.saml2.core.Saml2X509Credential; -import org.springframework.util.Assert; - -import lombok.Getter; -import net.shibboleth.utilities.java.support.component.ComponentInitializationException; -import net.shibboleth.utilities.java.support.resolver.CriteriaSet; -import net.shibboleth.utilities.java.support.xml.BasicParserPool; -import net.shibboleth.utilities.java.support.xml.ParserPool; -import net.shibboleth.utilities.java.support.xml.XMLParserException; - -@Configuration -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -class BayernIdSamlConfiguration { - private XMLObjectProviderRegistry registry; - @Getter - private ParserPool parserPool; - @Autowired - private AntragraumProperties antragraumProperties; - - @PostConstruct - void initOpenSAML() { - try { - registry = new XMLObjectProviderRegistry(); - ConfigurationService.register(XMLObjectProviderRegistry.class, registry); - parserPool = initParserPool(); - - registry.setParserPool(parserPool); - InitializationService.initialize(); - } catch (Exception e) { - throw new RuntimeException("Initialization failed"); - } - } - - private ParserPool initParserPool() throws ComponentInitializationException { - var localParserPool = new BasicParserPool(); - - final var features = createFeatureMap(); - - localParserPool.setBuilderFeatures(features); - - localParserPool.setBuilderAttributes(new HashMap<>()); - - localParserPool.initialize(); - - return localParserPool; - } - - private Map<String, Boolean> createFeatureMap() { - final Map<String, Boolean> features = new HashMap<>(); - features.put("http://xml.org/sax/features/external-general-entities", Boolean.FALSE); - features.put("http://xml.org/sax/features/external-parameter-entities", Boolean.FALSE); - features.put("http://apache.org/xml/features/disallow-doctype-decl", Boolean.TRUE); - features.put("http://apache.org/xml/features/validation/schema/normalized-value", Boolean.FALSE); - features.put("http://javax.xml.XMLConstants/feature/secure-processing", Boolean.TRUE); - return features; - } - - SignatureTrustEngine getTrustEngine() { - Set<Credential> credentials = new HashSet<>(); - Collection<Saml2X509Credential> keys = getCertificatesFromMetadata(); - - for (Saml2X509Credential key : keys) { - var cred = new BasicX509Credential(key.getCertificate()); - cred.setUsageType(UsageType.SIGNING); - cred.setEntityId(antragraumProperties.getEntityId()); - credentials.add(cred); - } - - CredentialResolver credentialsResolver = new CollectionCredentialResolver(credentials); - return new ExplicitKeySignatureTrustEngine(credentialsResolver, - DefaultSecurityConfigurationBootstrap.buildBasicInlineKeyInfoCredentialResolver()); - } - - CriteriaSet getVerificationCriteria() { - var criteria = new CriteriaSet(); - criteria.add(new EvaluableEntityIDCredentialCriterion(new EntityIdCriterion(antragraumProperties.getEntityId()))); - criteria.add(new EvaluableProtocolRoleDescriptorCriterion(new ProtocolCriterion("urn:oasis:names:tc:SAML:2.0:protocol"))); - criteria.add(new EvaluableUsageCredentialCriterion(new UsageCriterion(UsageType.SIGNING))); - return criteria; - } - - Saml2X509Credential getDecryptionCredential() { - var privateKey = readPrivateKey(antragraumProperties.getDecryptionPrivateKey()); - var certificate = readCertificateFromResource(antragraumProperties.getDecryptionCertificate()); - return new Saml2X509Credential(privateKey, certificate, Saml2X509Credential.Saml2X509CredentialType.DECRYPTION); - } - - private RSAPrivateKey readPrivateKey(Resource location) { - Assert.state(location != null, "No private key location specified"); - Assert.state(location.exists(), () -> "Private key location '" + location + "' does not exist"); - try (var inputStream = location.getInputStream()) { - return RsaKeyConverters.pkcs8().convert(inputStream); - } catch (IOException e) { - throw new IllegalArgumentException(e); - } - } - - private X509Certificate readCertificateFromResource(Resource location) { - Assert.state(location != null, "No certificate location specified"); - Assert.state(location.exists(), () -> "Certificate location '" + location + "' does not exist"); - try (var inputStream = location.getInputStream()) { - - return (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(inputStream); - } catch (IOException | CertificateException e) { - throw new IllegalArgumentException(e); - } - } - - List<Saml2X509Credential> getCertificatesFromMetadata() { - try (var metadata = antragraumProperties.getMetadataUri().getInputStream()) { - var xmlObject = xmlObject(metadata); - if (xmlObject instanceof EntitiesDescriptor descriptors) { - for (EntityDescriptor descriptor : descriptors.getEntityDescriptors()) { - if (descriptor.getIDPSSODescriptor(SAMLConstants.SAML20P_NS) != null) { - return getVerificationCertificates(descriptor); - } - } - } - } catch (IOException e) { - throw new Saml2Exception("Error reading idp metadata.", e); - } catch (ComponentInitializationException | XMLParserException e) { - throw new Saml2Exception("Error initializing parser pool.", e); - } - - throw new Saml2Exception("No IDPSSO Descriptors found"); - } - - private XMLObject xmlObject(InputStream inputStream) throws ComponentInitializationException, XMLParserException { - var document = getParserPool().parse(inputStream); - var element = document.getDocumentElement(); - var unmarshaller = this.registry.getUnmarshallerFactory().getUnmarshaller(element); - if (unmarshaller == null) { - throw new Saml2Exception("Unsupported element of type " + element.getTagName()); - } - try { - return unmarshaller.unmarshall(element); - } catch (Exception ex) { - throw new Saml2Exception(ex); - } - } - - List<Saml2X509Credential> getVerificationCertificates(EntityDescriptor descriptor) { - var idpssoDescriptor = descriptor.getIDPSSODescriptor(SAMLConstants.SAML20P_NS); - if (idpssoDescriptor == null) { - throw new Saml2Exception("Metadata response is missing the necessary IDPSSODescriptor element"); - } - List<Saml2X509Credential> verification = new ArrayList<>(); - for (KeyDescriptor keyDescriptor : idpssoDescriptor.getKeyDescriptors()) { - if (keyDescriptor.getUse().equals(UsageType.SIGNING)) { - var certificates = certificates(keyDescriptor); - for (X509Certificate certificate : certificates) { - verification.add(Saml2X509Credential.verification(certificate)); - } - } - } - if (verification.isEmpty()) { - throw new Saml2Exception( - "Metadata response is missing verification certificates, necessary for verifying SAML assertions"); - } - - return verification; - } - - private List<X509Certificate> certificates(KeyDescriptor keyDescriptor) { - try { - return KeyInfoSupport.getCertificates(keyDescriptor.getKeyInfo()); - } catch (CertificateException ex) { - throw new Saml2Exception(ex); - } - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Decrypter.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Decrypter.java deleted file mode 100644 index 9728ddba81bb0105dde77407ea24b44214e0b29d..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Decrypter.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * 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.nachrichten.antragraum; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; - -import jakarta.annotation.PostConstruct; - -import org.opensaml.core.xml.schema.XSString; -import org.opensaml.saml.saml2.core.AttributeStatement; -import org.opensaml.saml.saml2.core.EncryptedAssertion; -import org.opensaml.saml.saml2.core.Response; -import org.opensaml.saml.saml2.encryption.Decrypter; -import org.opensaml.saml.saml2.encryption.EncryptedElementTypeEncryptedKeyResolver; -import org.opensaml.security.credential.Credential; -import org.opensaml.security.credential.CredentialSupport; -import org.opensaml.xmlsec.encryption.support.ChainingEncryptedKeyResolver; -import org.opensaml.xmlsec.encryption.support.EncryptedKeyResolver; -import org.opensaml.xmlsec.encryption.support.InlineEncryptedKeyResolver; -import org.opensaml.xmlsec.encryption.support.SimpleRetrievalMethodEncryptedKeyResolver; -import org.opensaml.xmlsec.keyinfo.KeyInfoCredentialResolver; -import org.opensaml.xmlsec.keyinfo.impl.CollectionKeyInfoCredentialResolver; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.security.saml2.Saml2Exception; -import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -class Saml2Decrypter { - private final BayernIdSamlConfiguration configuration; - - public static final String LEGACY_POSTKORB_HANDLE_KEY = "legacyPostkorbHandle"; - private Decrypter decrypter; - private static final EncryptedKeyResolver encryptedKeyResolver = new ChainingEncryptedKeyResolver( - Arrays.asList(new InlineEncryptedKeyResolver(), new EncryptedElementTypeEncryptedKeyResolver(), - new SimpleRetrievalMethodEncryptedKeyResolver())); - - @PostConstruct - void init() { - Collection<Credential> credentials = new ArrayList<>(); - var decryptionX509Credential = configuration.getDecryptionCredential(); - - Credential cred = CredentialSupport.getSimpleCredential(decryptionX509Credential.getCertificate(), decryptionX509Credential.getPrivateKey()); - credentials.add(cred); - - KeyInfoCredentialResolver resolver = new CollectionKeyInfoCredentialResolver(credentials); - var setupDecrypter = new Decrypter(null, resolver, encryptedKeyResolver); - setupDecrypter.setRootInNewDocument(true); - - decrypter = setupDecrypter; - } - - void decryptResponseElements(Response response) { - for (EncryptedAssertion encryptedAssertion : response.getEncryptedAssertions()) { - try { - var assertion = decrypter.decrypt(encryptedAssertion); - response.getAssertions().add(assertion); - } catch (Exception ex) { - throw new Saml2Exception(ex); - } - } - } - - String decryptPostfachId(Response response) { - decryptResponseElements(response); - - var samlAssertion = response.getAssertions().get(0); - var statements = (AttributeStatement) samlAssertion.getStatements().get(1); - var attributes = statements.getAttributes(); - var postfachIdOptional = attributes.stream().filter(attribute -> LEGACY_POSTKORB_HANDLE_KEY.equals(attribute.getFriendlyName())).findFirst(); - - return postfachIdOptional.map(postfachIdAttribute -> { - var values = postfachIdAttribute.getAttributeValues(); - return ((XSString) values.get(0)).getValue(); - }).orElseThrow(); - - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Parser.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Parser.java deleted file mode 100644 index fa23252ab39606a73825a3981127f0731f0f7e49..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Parser.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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.nachrichten.antragraum; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.Objects; - -import org.opensaml.core.xml.XMLObject; -import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport; -import org.opensaml.core.xml.io.UnmarshallingException; -import org.opensaml.saml.saml2.core.Response; -import org.opensaml.saml.saml2.core.impl.ResponseUnmarshaller; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.security.saml2.Saml2Exception; -import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; -import net.shibboleth.utilities.java.support.xml.XMLParserException; - -@Service -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -@RequiredArgsConstructor -class Saml2Parser { - private final BayernIdSamlConfiguration configuration; - private ResponseUnmarshaller unmarshaller; - - Response parse(String request) { - return (Response) xmlObject(new ByteArrayInputStream(request.getBytes(StandardCharsets.UTF_8))); - } - - XMLObject xmlObject(InputStream inputStream) throws Saml2Exception { - try { - var document = configuration.getParserPool().parse(inputStream); - var element = document.getDocumentElement(); - return getUnmarshaller().unmarshall(element); - } catch (XMLParserException | UnmarshallingException e) { - throw new Saml2Exception("Failed to deserialize LogoutRequest", e); - } - } - - private ResponseUnmarshaller getUnmarshaller() { - if (Objects.nonNull(unmarshaller)) { - return unmarshaller; - } - - unmarshaller = (ResponseUnmarshaller) XMLObjectProviderRegistrySupport.getUnmarshallerFactory() - .getUnmarshaller(Response.DEFAULT_ELEMENT_NAME); - return unmarshaller; - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Verifier.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Verifier.java deleted file mode 100644 index e8cdf4d18e1ce1846294a165a1da80175aef452e..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Verifier.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * 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.nachrichten.antragraum; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import jakarta.annotation.PostConstruct; - -import org.opensaml.saml.security.impl.SAMLSignatureProfileValidator; -import org.opensaml.xmlsec.signature.support.SignatureTrustEngine; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.security.saml2.core.Saml2Error; -import org.springframework.security.saml2.core.Saml2ErrorCodes; -import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; -import net.shibboleth.utilities.java.support.resolver.CriteriaSet; - -@Log4j2 -@RequiredArgsConstructor -@Service -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -class Saml2Verifier { - public static final String INVALID_SIGNATURE = "Invalid signature for object [%s]: "; - public static final String SIGNATURE_MISSING = "Signature missing"; - private final Saml2Parser parser; - private final BayernIdSamlConfiguration configuration; - private SignatureTrustEngine trustEngine; - private CriteriaSet verificationCriteria; - - @PostConstruct - void init() { - trustEngine = configuration.getTrustEngine(); - verificationCriteria = configuration.getVerificationCriteria(); - } - - List<Saml2Error> verify(String samlToken) { - var response = parser.parse(samlToken); - - List<Saml2Error> errors = new ArrayList<>(); - var signature = response.getSignature(); - var profileValidator = new SAMLSignatureProfileValidator(); - if (Objects.nonNull(signature)) { - try { - profileValidator.validate(signature); - } catch (Exception ex) { - LOG.error("Error validating SAML Token: ", ex); - errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, INVALID_SIGNATURE.formatted(response.getID()))); - } - - try { - if (!trustEngine.validate(signature, verificationCriteria)) { - errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, INVALID_SIGNATURE.formatted(response.getID()))); - } - } catch (Exception ex) { - LOG.error("Error validating SAML Token: ", ex); - errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, INVALID_SIGNATURE.formatted(response.getID()))); - } - } else { - errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, SIGNATURE_MISSING)); - } - - return errors; - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteService.java deleted file mode 100644 index 1263c973b8dacb71b7d05752974c99d0f3580be7..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteService.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.attributes; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.nachrichten.common.grpc.NachrichtenCallContextAttachingInterceptor; -import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class ClientAttributeRemoteService { - - @GrpcClient("pluto") - private ClientAttributeServiceBlockingStub stub; - - public void setBooleanReadOnlyClientAttribute(String vorgangId, String attributeName, boolean value) { - stub.withInterceptors(new NachrichtenCallContextAttachingInterceptor()) - .set(buildRequest(vorgangId, attributeName, value)); - } - - private GrpcSetClientAttributeRequest buildRequest(String vorgangId, String attributeName, boolean value) { - return buildRequest(vorgangId, GrpcClientAttribute.newBuilder() - .setAccess(GrpcAccessPermission.READ_ONLY) - .setAttributeName(attributeName) - .setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(value).build()).build()); - } - - public void setBooleanWriteableClientAttribute(String vorgangId, String attributeName, boolean value) { - stub.withInterceptors(new NachrichtenCallContextAttachingInterceptor()) - .set(buildRequestForWritableAttribute(vorgangId, attributeName, value)); - } - - private GrpcSetClientAttributeRequest buildRequestForWritableAttribute(String vorgangId, String attributeName, boolean value) { - return buildRequest(vorgangId, GrpcClientAttribute.newBuilder() - .setAccess(GrpcAccessPermission.READ_WRITE) - .setAttributeName(attributeName) - .setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(value).build()).build()); - } - - private GrpcSetClientAttributeRequest buildRequest(String vorgangId, GrpcClientAttribute attribute) { - return GrpcSetClientAttributeRequest.newBuilder() - .setVorgangId(vorgangId) - .setAttribute(attribute) - .build(); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeService.java deleted file mode 100644 index 7588936184d490bdc797d2e1079e9d18942f3039..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeService.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.attributes; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -@Service("nachrichtenClientAttributeService") -public class ClientAttributeService { - - static final String ATTRIBUTE_NAME_HAS_POSTFACH_NACHRICHT = "hasPostfachNachricht"; - - static final String ATTRIBUTE_NAME_HAS_NEW_POSTFACH_NACHRICHT = "hasNewPostfachNachricht"; - - @Autowired - private ClientAttributeRemoteService remoteService; - - @Async - public void setHasPostfachNachricht(String vorgangId) { - remoteService.setBooleanReadOnlyClientAttribute(vorgangId, ATTRIBUTE_NAME_HAS_POSTFACH_NACHRICHT, true); - } - - @Async - public void setHasNewPostfachNachricht(String vorgangId) { - remoteService.setBooleanWriteableClientAttribute(vorgangId, ATTRIBUTE_NAME_HAS_NEW_POSTFACH_NACHRICHT, true); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeTestFactory.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeTestFactory.java deleted file mode 100644 index 1938b59ea336a5de1bfb9eed068e0442f61d4b60..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeTestFactory.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.attributes; - -public class ClientAttributeTestFactory { - - static final String ATTRIBUTE_NAME = "TestAttribute"; - static final String VALUE = "TestStringValue"; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/FunctionalException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/FunctionalException.java deleted file mode 100644 index df6be012c461f8428c0a34fea27db273db722e41..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/FunctionalException.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.common.errorhandling; - -public class FunctionalException extends RuntimeException { - - private static final long serialVersionUID = 1L; - - public FunctionalException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/TechnicalException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/TechnicalException.java deleted file mode 100644 index 307353addb43e18be2ccc745c9f139f08bee5b2a..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/TechnicalException.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.common.errorhandling; - -@Deprecated /** please use {@link de.ozgcloud.common.errorhandling.TechnicalException} */ -public class TechnicalException extends RuntimeException { - - private static final long serialVersionUID = 1L; - - public TechnicalException(String message) { - super(message); - } - - public TechnicalException(String message, Throwable cause) { - super(message, cause); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/grpc/NachrichtenCallContextAttachingInterceptor.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/grpc/NachrichtenCallContextAttachingInterceptor.java deleted file mode 100644 index d3fa03da97bf23b79dfc2d31325b28777260d8be..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/grpc/NachrichtenCallContextAttachingInterceptor.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.common.grpc; - -import static de.ozgcloud.common.grpc.GrpcUtil.*; - -import java.util.UUID; - -import io.grpc.CallOptions; -import io.grpc.Channel; -import io.grpc.ClientCall; -import io.grpc.ClientInterceptor; -import io.grpc.ForwardingClientCall.SimpleForwardingClientCall; -import io.grpc.Metadata; -import io.grpc.MethodDescriptor; - -public class NachrichtenCallContextAttachingInterceptor implements ClientInterceptor { - - static final String KEY_USER_ID = "USER_ID-bin"; - static final String KEY_CLIENT_NAME = "CLIENT_NAME-bin"; - static final String KEY_REQUEST_ID = "REQUEST_ID-bin"; - - public static final String NACHRICHTEN_MANAGER_CLIENT_NAME = "OzgCloud_NachrichtenManager"; - static final String NACHRICHTEN_MANAGER_SENDER_USER_ID = "system-nachrichten_manager-sender"; - - // <A> = Request, <B> = Response - @Override - public <A, B> ClientCall<A, B> interceptCall(MethodDescriptor<A, B> method, CallOptions callOptions, Channel next) { - return new CallContextAttachingClientCall<>(next.newCall(method, callOptions)); - } - - final class CallContextAttachingClientCall<A, B> extends SimpleForwardingClientCall<A, B> { - - protected CallContextAttachingClientCall(ClientCall<A, B> delegate) { - super(delegate); - } - - @Override - public void start(Listener<B> responseListener, Metadata headers) { - headers.merge(buildCallContextMetadata()); - super.start(responseListener, headers); - } - - private Metadata buildCallContextMetadata() { - var metadata = new Metadata(); - - metadata.put(createKeyOf(KEY_USER_ID), NACHRICHTEN_MANAGER_SENDER_USER_ID.getBytes()); - metadata.put(createKeyOf(KEY_CLIENT_NAME), NACHRICHTEN_MANAGER_CLIENT_NAME.getBytes()); - metadata.put(createKeyOf(KEY_REQUEST_ID), generateRequestId().getBytes()); - - return metadata; - } - - // TODO OZG-1974 requestId zentraler erzeugen - private String generateRequestId() { - return UUID.randomUUID().toString(); - } - - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EMailService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EMailService.java deleted file mode 100644 index 8f5c54e5ddc42b29e9c78810d1fa423db98adb4d..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EMailService.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -import java.util.Objects; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.mail.MailException; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.mail.javamail.MimeMessageHelper; -import org.springframework.stereotype.Service; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.email.MailSendRequest.MailAttachment; -import jakarta.mail.MessagingException; -import jakarta.mail.internet.MimeMessage; -import lombok.extern.log4j.Log4j2; - -@Service -@Log4j2 -class EMailService { - - static final String HEADER_READ_RECEIPT = "Read-Receipt-To"; - static final String HEADER_CONFIRM_READING = "X-Confirm-reading-to"; - static final String HEADER_DISPOSITION_NOTIFICATION = "Disposition-Notification-To"; - static final String HEADER_SENSITIVITY = "Sensitivity"; // RFC2156 - static final String VALUE_SENSITIVITY = "Company-Confidential"; - - @Autowired - private JavaMailSender sender; - - @Autowired - private ApplicationEventPublisher publisher; - - public void sendEmail(MailSendRequest request) { - MimeMessage message = sender.createMimeMessage(); - prepareAndSendMail(message, request); - } - - void prepareAndSendMail(MimeMessage message, MailSendRequest request) { - MimeMessageHelper helper = buildMultipartHelper(message); - - writeEmail(helper, request); - addAttachments(helper, request); - if (request.isReceiptRequired()) { - requestReceipt(message, request); - } - addHeader(message, "Content-Transfer-Encoding", "quoted-printable"); - send(message, request); - } - - void writeEmail(MimeMessageHelper helper, MailSendRequest request) { - try { - var toAddresses = request.getToAddresses().stream().map(this::formatEmailAddress).toArray(String[]::new); - helper.setTo(toAddresses); - helper.setFrom(request.getFromAddress()); - helper.setSubject(request.getSubject()); - helper.setText(request.getBody()); - // TODO replyTo ausbauen - setReplyTo(helper, request); - } catch (MessagingException e) { - throw new TechnicalException("Error writing mail", e); - } - } - - private String formatEmailAddress(MailRecipient mailRecipient) { - if (StringUtils.isAllBlank(mailRecipient.firstName(), mailRecipient.lastName())) { - return mailRecipient.email(); - } - var builder = new StringBuilder(); - if (StringUtils.isNotEmpty(mailRecipient.firstName())) { - builder.append(mailRecipient.firstName()).append(" "); - } - if (StringUtils.isNotEmpty(mailRecipient.lastName())) { - builder.append(mailRecipient.lastName()).append(" "); - } - return builder.append("<").append(mailRecipient.email()).append(">").toString(); - } - - private void setReplyTo(MimeMessageHelper helper, MailSendRequest request) throws MessagingException { - if (Objects.nonNull(request.getReplyTo())) { - helper.setReplyTo(request.getReplyTo()); - } - } - - void requestReceipt(MimeMessage message, MailSendRequest request) { - addHeader(message, HEADER_READ_RECEIPT, request.getFromAddress()); - addHeader(message, HEADER_CONFIRM_READING, request.getFromAddress()); - addHeader(message, HEADER_DISPOSITION_NOTIFICATION, request.getFromAddress()); - } - - private void addHeader(MimeMessage message, String header, String value) { - try { - message.addHeader(header, value); - } catch (MessagingException e) { - throw new TechnicalException(String.format("Error adding header '%s' with value '%s'", header, value), e); - } - } - - void addAttachments(MimeMessageHelper helper, MailSendRequest request) { - request.getAttachments().forEach(attachment -> addAttachment(helper, attachment)); - } - - private void addAttachment(MimeMessageHelper helper, MailAttachment attachment) { - try { - if (Objects.isNull(attachment.getContentId())) { - helper.addAttachment(attachment.getDataSource().getName(), attachment.getDataSource()); - } else { - helper.addInline(attachment.getContentId(), attachment.getDataSource()); - - } - - } catch (MessagingException e) { - throw new TechnicalException("Error adding Attachment.", e); - } - } - - private MimeMessageHelper buildMultipartHelper(MimeMessage message) { - try { - return new MimeMessageHelper(message, true); - } catch (MessagingException e) { - throw new TechnicalException("Error creating multipart message helper.", e); - } - } - - void send(MimeMessage message, MailSendRequest request) { - try { - sender.send(message); - publisher.publishEvent(new MailSentEvent(request)); - } catch (MailException e) { - LOG.error("Error sending mail", e); - publisher.publishEvent(new MailSendErrorEvent(request, e.getMessage())); - } - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EmailGrpcService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EmailGrpcService.java deleted file mode 100644 index 4a53a505a48ece44cdbc9d1ed82cbe783de11634..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EmailGrpcService.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; - -import de.ozgcloud.nachrichten.email.MailSendRequest.MailSendRequestBuilder; -import io.grpc.stub.StreamObserver; -import net.devh.boot.grpc.server.service.GrpcService; - -@GrpcService -public class EmailGrpcService extends EmailServiceGrpc.EmailServiceImplBase { - - @Autowired - private MailService mailService; - - @Value("${ozgcloud.notification.mail-from}") - private String mailFrom; - - @Override - public void sendEmail(GrpcSendEmailRequest grpcRequest, StreamObserver<GrpcSendEmailResponse> responseObserver) { - createSendMailRequests(grpcRequest).forEach(mailService::sendMail); - responseObserver.onNext(GrpcSendEmailResponse.newBuilder().build()); - responseObserver.onCompleted(); - } - - private List<MailSendRequest> createSendMailRequests(GrpcSendEmailRequest grpcRequest) { - var subject = grpcRequest.getSubject(); - var body = grpcRequest.getBody(); - return grpcRequest.getRecipientsList().stream() - .map(this::prepareMailSendRequest) - .map(builder -> builder.subject(subject).body(body).build()) - .toList(); - } - - private MailSendRequestBuilder prepareMailSendRequest(GrpcRecipient recipient) { - var mailRecipient = MailRecipient.builder().firstName(recipient.getFirstName()).lastName(recipient.getLastName()).email(recipient.getEmail()) - .build(); - return MailSendRequest.builder().fromAddress(mailFrom).toAddress(mailRecipient); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailRecipient.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailRecipient.java deleted file mode 100644 index e5f76ec83abb204fb3e88ffd4c69f1ff243548b2..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailRecipient.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -import lombok.Builder; - -@Builder -public record MailRecipient(String firstName, String lastName, String email) { -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendErrorEvent.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendErrorEvent.java deleted file mode 100644 index 0bb7d78e7a4dc551691dea0b5f3425d15e95aa31..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendErrorEvent.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -import org.springframework.context.ApplicationEvent; - -import lombok.Getter; - -public class MailSendErrorEvent extends ApplicationEvent { - - private static final long serialVersionUID = 1L; - - @Getter - private final String errorMessage; - - MailSendErrorEvent(MailSendRequest source, String errorMessage) { - super(source); - this.errorMessage = errorMessage; - } - - @Override - public MailSendRequest getSource() { - return (MailSendRequest) super.getSource(); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendRequest.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendRequest.java deleted file mode 100644 index 8026f7cc8e9c1c1f287ec4621e7354092a02f648..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendRequest.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -import java.util.Collection; - -import jakarta.activation.DataSource; -import lombok.Builder; -import lombok.Getter; -import lombok.Singular; - -@Getter -@Builder -public class MailSendRequest { - - private String fromAddress; - @Singular - private Collection<MailRecipient> toAddresses; - - private String replyTo; - - private String subject; - private String body; - @Singular - private Collection<MailAttachment> attachments; - - private boolean receiptRequired; - - private Object requestReference; - - @Getter - @Builder - public static class MailAttachment { - - private DataSource dataSource; - private String contentId; - - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSentEvent.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSentEvent.java deleted file mode 100644 index 1c69e781b75afd951e5b3dee5c2b840765a90039..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSentEvent.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -import org.springframework.context.ApplicationEvent; - -public class MailSentEvent extends ApplicationEvent { - - private static final long serialVersionUID = 1L; - - MailSentEvent(MailSendRequest source) { - super(source); - } - - @Override - public MailSendRequest getSource() { - return (MailSendRequest) super.getSource(); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailService.java deleted file mode 100644 index 1dd1bbde8018bbd11c39c1dff3c44590a05e20cc..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailService.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -@Service -public class MailService { - - @Autowired - private EMailService emailService; - - @Async - public void sendMail(MailSendRequest request) { - emailService.sendEmail(request); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteService.java deleted file mode 100644 index 47e348e465deef3bf276d8e01040f37c03bf0c82..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteService.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.info.nachricht.GrpcNewNachrichtRequest; -import de.ozgcloud.info.nachricht.NachrichtServiceGrpc.NachrichtServiceBlockingStub; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class InfoManagerRemoteService { - - @GrpcClient("info-manager") - private NachrichtServiceBlockingStub nachrichtServiceStub; - - @Autowired - private InfomanagerNachrichtMapper nachrichtMapper; - - public String sendNotification(InfoManagerRequest nachricht) { - var grpcNewNachrichtReply = nachrichtServiceStub.saveNewNachricht(buildNachrichtRequest(nachricht)); - return grpcNewNachrichtReply.getStatus(); - } - - GrpcNewNachrichtRequest buildNachrichtRequest(InfoManagerRequest nachricht) { - return GrpcNewNachrichtRequest.newBuilder().setNachricht(nachrichtMapper.toGrpc(nachricht)).build(); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRequest.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRequest.java deleted file mode 100644 index 639de00a4579a5bb79587ae266e6a3b7c70de697..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRequest.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class InfoManagerRequest { - - private String nachrichtId; - private String vorgangId; - private String postfachId; - private String nachrichtenManagerUrl; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java deleted file mode 100644 index 0894f261289cbb127021fda5807a1a889e5615f6..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; - -import de.ozgcloud.nachrichten.NachrichtenManagerProperties; -import de.ozgcloud.nachrichten.antragraum.AntragraumProperties; -import de.ozgcloud.nachrichten.postfach.PostfachException; -import de.ozgcloud.nachrichten.postfach.PostfachMessageCode; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -public class InfoManagerService { - - private final InfoManagerRemoteService infomanagerRemoteService; - private final NachrichtenManagerProperties nachrichtenManagerProperties; - - public void notifyInfoManager(PostfachNachricht postfachNachricht) { - try { - infomanagerRemoteService.sendNotification(builInfomanagerRequest(postfachNachricht)); - } catch (RuntimeException e) { - throw new PostfachException("Error while sending notification to Antragsraum", PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE, e); - } - } - - InfoManagerRequest builInfomanagerRequest(PostfachNachricht postfachNachricht) { - return InfoManagerRequest.builder() - .nachrichtId(postfachNachricht.getId()) - .vorgangId(postfachNachricht.getVorgangId()) - .postfachId(postfachNachricht.getPostfachId()) - .nachrichtenManagerUrl(nachrichtenManagerProperties.getUrl()) - .build(); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapper.java deleted file mode 100644 index 655bdc3f724e1792b4ee5fb0408f10d403e354fd..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -import de.ozgcloud.info.nachricht.GrpcNachricht; - -@Mapper -interface InfomanagerNachrichtMapper { - - @Mapping(target = "nachrichtenListUrl", source = "nachrichtenManagerUrl") - GrpcNachricht toGrpc(InfoManagerRequest infomanagerNachricht); - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerProperties.java deleted file mode 100644 index eb89410dcb38b94405da0135acbfbb0db0fff40d..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerProperties.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import jakarta.validation.constraints.NotEmpty; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.validation.annotation.Validated; - -import de.ozgcloud.nachrichten.antragraum.AntragraumProperties; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConfigurationProperties(prefix = "grpc.client.info-manager") -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -@Validated -public class InfomanagerProperties { - - @NotEmpty - private String address; - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java deleted file mode 100644 index 0133636869be97afda3d6b5f1475c5773fe5a720..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 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.nachrichten.postfach; - -import static java.util.Objects.*; - -import java.io.InputStream; -import java.util.function.Supplier; - -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.ToString; - -@Builder -@Getter -@ToString -public class AttachmentFile { - private String name; - private String contentType; - @Getter(AccessLevel.NONE) - @ToString.Exclude - private Supplier<InputStream> content; - - public InputStream getContent() { - if (isNull(content)) { - return InputStream.nullInputStream(); - } - return content.get(); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java deleted file mode 100644 index 6f7465cea0ab0426c3ddcf8f456a159479905a53..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import java.io.InputStream; - -import com.mongodb.client.gridfs.model.GridFSFile; - -//Temporally replacement for using GRPC Api -public interface BinaryFileService { - - InputStream getUploadedFileStream(FileId fileId); - - GridFSFile getFile(FileId fileId); -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/FileId.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/FileId.java deleted file mode 100644 index 785167921385774bb9e5ebd5917fc73f0e2a2523..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/FileId.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import java.util.UUID; - -import de.ozgcloud.common.datatype.StringBasedValue; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -public class FileId extends StringBasedValue { - - private static final long serialVersionUID = 1L; - - FileId(String fileId) { - super(fileId); - } - - public static FileId createNew() { - return from(UUID.randomUUID().toString()); - } - - public static FileId from(String fileId) { - return new FileId(fileId); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachNachrichtMapper.java deleted file mode 100644 index 53a1512d66e5c20b10821c3953e9343ccb7ac690..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachNachrichtMapper.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -import de.ozgcloud.vorgang.common.GrpcObject; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; - -@Mapper(uses = GrpcObjectMapper.class) -public interface GrpcPostfachNachrichtMapper { - - @Mapping(target = "attachments", source = "attachmentList") - @Mapping(target = "createdAt", ignore = true) - @Mapping(target = "createdBy", ignore = true) - @Mapping(target = "direction", constant = "OUT") - @Mapping(target = "messageCode", ignore = true) - @Mapping(target = "messageId", ignore = true) - @Mapping(target = "postfachId", ignore = true) - @Mapping(target = "sentAt", ignore = true) - @Mapping(target = "sentSuccessful", ignore = true) - @Mapping(target = "vorgangId", ignore = true) - PostfachNachricht mapFromGrpc(GrpcPostfachNachricht nachricht); - - default PostfachAddressIdentifier map(GrpcObject value) { - return StringBasedIdentifier.builder().postfachId(value.getProperty(0).getValue(0)).build(); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/NotConfiguredException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/NotConfiguredException.java deleted file mode 100644 index a677491d25e04978252be8dd2cc48a70cf89bdd4..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/NotConfiguredException.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -public class NotConfiguredException extends PostfachException { // NOSONAR - - private static final long serialVersionUID = 1L; - - public NotConfiguredException() { - super("Postfach is not completely configured. Sending and receiving of postfach mails is not possible.", - PostfachMessageCode.SERVER_CONNECTION_FAILED_MESSAGE_CODE); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java deleted file mode 100644 index e25434580bfdd469b80fbf950f39197c53996c6e..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import java.util.Map; -import java.util.Optional; -import java.util.stream.Stream; - -//Temporally replacement for usign GRPC Api -public interface PersistPostfachNachrichtService { - - void persistNachricht(Optional<String> userId, PostfachNachricht nachricht); - - Stream<Map<String, Object>> findByVorgangAsMap(String vorgangId); - - Optional<Map<String, Object>> findById(String nachrichtId); - - void patch(String postfachMailId, Map<String, Object> propertyMap); - - Map<String, Object> getById(String itemId); - - // TODO use file id as soon it is available - String persistAttachment(String vorgangId, AttachmentFile attachment); - - Stream<PostfachNachricht> findRueckfragen(String postfachId); - - /** - * Persists the given answer - * - * @param answer The given answer - * @param rueckfrageId The ID of the original Rueckfrage - * @return - */ - String persistAnswer(String rueckfrageId, PostfachNachricht answer); - - /** - * Returns all Answers given for the Rueckfrage identified by id - * - * @param rueckfrageId ID of the Rueckfrage to load answers for. - * @return all Answers - */ - Stream<PostfachNachricht> findAnswers(String rueckfrageId); -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/Postfach.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/Postfach.java deleted file mode 100644 index 4177ff1a1adb9ab0204e17f8924ab574298c6ed2..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/Postfach.java +++ /dev/null @@ -1,13 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -class Postfach { - - private String type; - - private boolean isReplyAllowed; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java deleted file mode 100644 index 29ce7bec0ced118af2891c46d6504ecfb783a9eb..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class PostfachAddress { - - public static final String VERSION_FIELD = "version"; - public static final String TYPE_FIELD = "type"; - public static final String IDENTIFIER_FIELD = "identifier"; - public static final String SERVICEKONTO_TYPE_FIELD = "serviceKontoType"; - - private String version; - private int type; - private PostfachAddressIdentifier identifier; - private String serviceKontoType; -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java deleted file mode 100644 index 5d60cfbd4c5550d249fb6701571e058249dffa38..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java +++ /dev/null @@ -1,5 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -public interface PostfachAddressIdentifier { - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachBadRequestException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachBadRequestException.java deleted file mode 100644 index 6b9fdea6c23650971db706fd1792a6d5029cb3bf..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachBadRequestException.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -public class PostfachBadRequestException extends PostfachException { - - private static final long serialVersionUID = 1L; - - public PostfachBadRequestException(Throwable cause) { - super("Bad-Request Received from Postfach Server", PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE, cause); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachEventListener.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachEventListener.java deleted file mode 100644 index 98dc2be90e015d7d16e8a549f8dbd9ec90725d2f..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachEventListener.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Predicate; - -import org.apache.commons.collections.MapUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Component; - -import de.ozgcloud.command.Command; -import de.ozgcloud.command.CommandCreatedEvent; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import lombok.extern.log4j.Log4j2; - -@Component -@Log4j2 -public class PostfachEventListener { - - private static final String IS_SEND_POSTFACH_NACHRICHT_COMMAND = "{T(de.ozgcloud.nachrichten.postfach.PostfachEventListener).IS_SEND_POSTFACH_NACHRICHT.test(event.getSource())}"; - - public static final Predicate<Command> IS_SEND_POSTFACH_NACHRICHT = command -> command.getOrder().equals("SEND_POSTFACH_NACHRICHT"); - - @Autowired - private PostfachService service; - - @EventListener(condition = IS_SEND_POSTFACH_NACHRICHT_COMMAND) - public void sendPostfachNachricht(CommandCreatedEvent event) { - var command = event.getSource(); - try { - service.sendMail(command.getId(), command.getCreatedBy(), buildNachricht(command, command.getBodyObject())); - } catch (RuntimeException e) { - service.publishMailSentFailedEvent(command.getId(), "Error on sending Postfach Nachricht: " + e.getMessage()); - LOG.error("Error on sending Postfach Nachricht.", e); - } - } - - private PostfachNachricht buildNachricht(Command command, Map<String, Object> commandBody) { - var postfachMailBuilder = PostfachNachricht.builder() - .id(isNewNachricht(command) ? null : command.getRelationId()) - .vorgangId(command.getVorgangId()) - .postfachId(MapUtils.getString(commandBody, PostfachNachricht.FIELD_POSTFACH_ID)) - .replyOption(PostfachNachricht.ReplyOption.valueOf(MapUtils.getString(commandBody, PostfachNachricht.FIELD_REPLY_OPTION))) - .createdBy(command.getCreatedBy()) - .direction(Direction.OUT) - .subject(MapUtils.getString(commandBody, PostfachNachricht.FIELD_SUBJECT)) - .mailBody(MapUtils.getString(commandBody, PostfachNachricht.FIELD_MAIL_BODY)) - .attachments(getStringListValue(commandBody, PostfachNachricht.FIELD_ATTACHMENTS)); - - Optional.ofNullable(getPostfachAddress(commandBody)).map(this::buildPostfachAddress).ifPresent(postfachMailBuilder::postfachAddress); - - return postfachMailBuilder.build(); - } - - private boolean isNewNachricht(Command command) { - return Objects.isNull(command.getRelationId()) || StringUtils.equals(command.getVorgangId(), command.getRelationId()); - } - - private PostfachAddress buildPostfachAddress(Map<String, Object> postfachAddress) { - return PostfachAddress.builder() - .type(MapUtils.getIntValue(postfachAddress, PostfachAddress.TYPE_FIELD)) - .version(MapUtils.getString(postfachAddress, PostfachAddress.VERSION_FIELD)) - .identifier(buildIdentifier(postfachAddress)) - .serviceKontoType(MapUtils.getString(postfachAddress, PostfachAddress.SERVICEKONTO_TYPE_FIELD)) - .build(); - } - - @SuppressWarnings("unchecked") - private Map<String, Object> getPostfachAddress(Map<String, Object> commandBody) { - return (Map<String, Object>) commandBody.get(PostfachNachricht.POSTFACH_ADDRESS_FIELD); - } - - private PostfachAddressIdentifier buildIdentifier(Map<String, Object> postfachAddress) { - var identifier = getIdentifier(postfachAddress); - return StringBasedIdentifier.builder().postfachId(MapUtils.getString(identifier, PostfachNachricht.FIELD_POSTFACH_ID)).build(); - } - - @SuppressWarnings("unchecked") - private Map<String, Object> getIdentifier(Map<String, Object> postfachAddress) { - return (Map<String, Object>) postfachAddress.get(PostfachAddress.IDENTIFIER_FIELD); - } - - List<String> getStringListValue(Map<String, Object> commandBody, String fieldName) { - return Optional.ofNullable(commandBody.get(fieldName)) - .map(this::mapObjectToList) - .orElse(Collections.emptyList()); - } - - private List<String> mapObjectToList(Object object) { - if (object instanceof Collection<?> objects) { - return objects.stream().map(Objects::toString).toList(); - } else { - return List.of(object.toString()); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachException.java deleted file mode 100644 index 26717bcba4d2b7f992fa845f1d2573c353117ffe..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachException.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.Getter; - -public class PostfachException extends TechnicalException { - - private static final long serialVersionUID = 1L; - @Getter - private final PostfachMessageCode messageCode; - - public PostfachException(String message, PostfachMessageCode messageCode) { - super(message); - this.messageCode = messageCode; - } - - public PostfachException(String message, PostfachMessageCode messageCode, Throwable cause) { - super(message, cause); - - this.messageCode = messageCode; - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcService.java deleted file mode 100644 index 6a9cb11772b676ccb5d0a008c75f9776058a0f33..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcService.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import org.apache.commons.collections.CollectionUtils; -import org.springframework.beans.factory.annotation.Autowired; - -import de.ozgcloud.nachrichten.postfach.PostfachServiceGrpc.PostfachServiceImplBase; -import io.grpc.stub.StreamObserver; -import net.devh.boot.grpc.server.service.GrpcService; - -@GrpcService -class PostfachGrpcService extends PostfachServiceImplBase { - - @Autowired - private PostfachService service; - @Autowired - private PostfachNachrichtMapper mapper; - @Autowired - private PostfachMapper postfachMapper; - - @Autowired - private GrpcPostfachNachrichtMapper nachrichtMapper; - - @Override - public void saveNachrichtDraft(GrpcSaveNachrichtDraftRequest request, StreamObserver<GrpcSaveNachrichtDraftResponse> response) { - service.saveDraft(request.getVorgangId(), nachrichtMapper.mapFromGrpc(request.getNachricht())); - - response.onNext(GrpcSaveNachrichtDraftResponse.newBuilder().build()); - response.onCompleted(); - } - - @Override - public void sendPostfachMail(GrpcSendPostfachMailRequest req, StreamObserver<GrpcSendPostfachMailResponse> response) { - service.sendMail(req.getCommandId(), req.getContext().getUser().getId(), mapper.fromGrpcMail(req.getMail())); - - response.onNext(GrpcSendPostfachMailResponse.newBuilder().build()); - response.onCompleted(); - } - - @Override - public void findPostfachMail(GrpcFindPostfachMailRequest req, StreamObserver<GrpcFindPostfachMailResponse> response) { - var responseBuilder = GrpcFindPostfachMailResponse.newBuilder(); - service.findById(req.getNachrichtId()).map(mapper::fromMap).ifPresent(responseBuilder::setNachricht); - - response.onNext(responseBuilder.build()); - response.onCompleted(); - } - - @Override - public void findPostfachMails(GrpcFindPostfachMailsRequest req, StreamObserver<GrpcFindPostfachMailsResponse> response) { - var mails = service.findByVorgang(req.getVorgangId()).map(mapper::fromMap).toList(); - - response.onNext(GrpcFindPostfachMailsResponse.newBuilder().addAllMails(mails).build()); - response.onCompleted(); - } - - @Override - public void resendPostfachMail(GrpcResendPostfachMailRequest request, StreamObserver<GrpcResendPostfachMailResponse> response) { - service.resendMail(request.getCommandId(), request.getPostfachMailId()); - - response.onNext(GrpcResendPostfachMailResponse.newBuilder().build()); - response.onCompleted(); - } - - @Override - public void isPostfachConfigured(GrpcIsPostfachConfiguredRequest request, StreamObserver<GrpcIsPostfachConfiguredResponse> response) { - response.onNext(GrpcIsPostfachConfiguredResponse.newBuilder().setIsConfigured(service.isPostfachConfigured()).build()); - response.onCompleted(); - } - - @Override - public void getPostfachConfig(GrpcGetPostfachConfigRequest request, StreamObserver<GrpcGetPostfachConfigResponse> response) { - response.onNext(buildGetPostfachConfigResponse()); - response.onCompleted(); - } - - GrpcGetPostfachConfigResponse buildGetPostfachConfigResponse() { - var grpcPostfachs = service.getPostfachs().map(postfachMapper::toGrpc).toList(); - if (CollectionUtils.isEmpty(grpcPostfachs)) { - return GrpcGetPostfachConfigResponse.newBuilder().setConfigured(false).build(); - } - return GrpcGetPostfachConfigResponse.newBuilder().setConfigured(true).addAllPostfach(grpcPostfachs).build(); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentEvent.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentEvent.java deleted file mode 100644 index 84daf0b1b4cf05b11baf6d21fd4da166319abe1d..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import de.ozgcloud.command.CommandExecutedEvent; - -public class PostfachMailSentEvent extends CommandExecutedEvent { - - private static final long serialVersionUID = 1L; - - PostfachMailSentEvent(String commandId) { - super(commandId); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentFailedEvent.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentFailedEvent.java deleted file mode 100644 index c139a1167aedc70086e476d260552fbf9d0b5424..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentFailedEvent.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import de.ozgcloud.command.CommandFailedEvent; - -public class PostfachMailSentFailedEvent extends CommandFailedEvent { - - private static final long serialVersionUID = 1L; - - PostfachMailSentFailedEvent(String commandId, String errorMessage) { - super(commandId, errorMessage); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMapper.java deleted file mode 100644 index 5ef07c77b6572b095e04af58b0d9de5cd659c86b..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import org.mapstruct.Mapper; - -@Mapper -public interface PostfachMapper { - - GrpcPostfach toGrpc(Postfach postfach); -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMessageCode.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMessageCode.java deleted file mode 100644 index edcdb065cdd9d24f228f0da6ab6ac17146981e8b..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMessageCode.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@AllArgsConstructor(access = AccessLevel.PRIVATE) -public enum PostfachMessageCode { - - PROCESS_FAILED_MESSAGE_CODE("postfachnachricht.server.processing_failed"), - SERVER_CONNECTION_FAILED_MESSAGE_CODE("postfachnachricht.server.connection_failed"), - SEND_SUCCESSFUL_MESSAGE_CODE("postfachnachricht.successful"); - - @Getter - private String messageCode; -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachricht.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachricht.java deleted file mode 100644 index 54c5ccf3824951d6f9e32bd61f0c4cbfcc1f6221..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachricht.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; - -import jakarta.validation.constraints.NotNull; -import lombok.Builder; -import lombok.Getter; - -@Builder(toBuilder = true) -@Getter -public class PostfachNachricht { - - public enum ReplyOption { - POSSIBLE, MANDATORY, FORBIDDEN - } - - public static final String FIELD_ID = "id"; - public static final String FIELD_VORGANG_ID = "vorgangId"; - - public static final String FIELD_POSTFACH_ID = "postfachId"; - public static final String POSTFACH_ADDRESS_FIELD = "postfachAddress"; - - public static final String FIELD_MESSAGE_ID = "messageId"; - public static final String FIELD_CREATED_AT = "createdAt"; - public static final String FIELD_CREATED_BY = "createdBy"; - public static final String FIELD_SENT_AT = "sentAt"; - public static final String FIELD_SENT_SUCCESSFUL = "sentSuccessful"; - public static final String FIELD_MESSAGE_CODE = "messageCode"; - public static final String FIELD_DIRECTION = "direction"; - public static final String FIELD_SUBJECT = "subject"; - public static final String FIELD_MAIL_BODY = "mailBody"; - public static final String FIELD_REPLY_OPTION = "replyOption"; - public static final String FIELD_ATTACHMENTS = "attachments"; - - public enum Direction { - IN, OUT - } - - private String id; - - private String vorgangId; - private String postfachId; - private PostfachAddress postfachAddress; - private String messageId; - - @Builder.Default - private ZonedDateTime createdAt = ZonedDateTime.now().withNano(0); - private String createdBy; - - private ZonedDateTime sentAt; - private Boolean sentSuccessful; - private String messageCode; - - private Direction direction; - - private String subject; - private String mailBody; - - @NotNull - private ReplyOption replyOption; - - @Builder.Default - private List<String> attachments = Collections.emptyList(); -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java deleted file mode 100644 index d7b6ca635a2f6940a7f28777a64ce0a8d6bc4089..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import org.apache.commons.collections.MapUtils; -import org.apache.commons.lang3.StringUtils; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.MappingConstants; -import org.mapstruct.ReportingPolicy; -import org.mapstruct.ValueMapping; -import org.springframework.beans.factory.annotation.Autowired; - -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import de.ozgcloud.vorgang.common.GrpcObject; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; - -@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) -public abstract class PostfachNachrichtMapper { - - @Autowired - private GrpcObjectMapper grpcObjectMapper; - - @Mapping(target = "attachments", source = "attachmentList") - @Mapping(target = "createdAt", ignore = true) - @Mapping(target = "createdBy", ignore = true) - @Mapping(target = "direction", ignore = true) - @Mapping(target = "messageId", ignore = true) - @Mapping(target = "sentAt", ignore = true) - @Mapping(target = "sentSuccessful", ignore = true) - @ValueMapping(source = "UNRECOGNIZED", target = MappingConstants.NULL) - @ValueMapping(source = "UNDEFINED", target = MappingConstants.NULL) - public abstract PostfachNachricht fromGrpcMail(GrpcPostfachMail grpcMail); - - public PostfachAddressIdentifier toPostfachAddressIdentifier(GrpcObject grpcObject) { - var postfachId = grpcObject.getPropertyList().get(0).getValue(0); - return StringBasedIdentifier.builder().postfachId(postfachId).build(); - } - - @SuppressWarnings("unchecked") - public GrpcPostfachMail fromMap(Map<String, Object> mailMap) { - var postfachMailBuilder = GrpcPostfachMail.newBuilder() - .setId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_ID)) - .setVorgangId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_VORGANG_ID)) - .setPostfachId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_POSTFACH_ID, StringUtils.EMPTY)) - .setCreatedAt(MapUtils.getString(mailMap, PostfachNachricht.FIELD_CREATED_AT)) - .setCreatedBy(MapUtils.getString(mailMap, PostfachNachricht.FIELD_CREATED_BY, StringUtils.EMPTY)) - .setSentAt(MapUtils.getString(mailMap, PostfachNachricht.FIELD_SENT_AT, StringUtils.EMPTY)) - .setSentSuccessful(MapUtils.getBooleanValue(mailMap, PostfachNachricht.FIELD_SENT_SUCCESSFUL, false)) - .setMessageCode(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MESSAGE_CODE, StringUtils.EMPTY)) - .setDirection(GrpcDirection.valueOf(MapUtils.getString(mailMap, PostfachNachricht.FIELD_DIRECTION))) - .setSubject(MapUtils.getString(mailMap, PostfachNachricht.FIELD_SUBJECT)) - .setMailBody(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MAIL_BODY)) - .setReplyOption(MapUtils.getString(mailMap, PostfachNachricht.FIELD_REPLY_OPTION)) - .addAllAttachment((Iterable<String>) mailMap.getOrDefault(PostfachNachricht.FIELD_ATTACHMENTS, Collections.emptyList())); - - Optional.ofNullable(getAsMap(mailMap, PostfachNachricht.POSTFACH_ADDRESS_FIELD)) - .filter(MapUtils::isNotEmpty) - .map(this::buildGrpcPostfachAddress) - .ifPresent(postfachMailBuilder::setPostfachAddress); - - return postfachMailBuilder.build(); - } - - GrpcPostfachAddress buildGrpcPostfachAddress(Map<String, Object> postfachAddressMap) { - var postfachAddressBuilder = GrpcPostfachAddress.newBuilder() - .setType(MapUtils.getIntValue(postfachAddressMap, PostfachAddress.TYPE_FIELD)) - .setVersion(MapUtils.getString(postfachAddressMap, PostfachAddress.VERSION_FIELD)) - .setIdentifier(grpcObjectMapper.fromMap(postfachAddressMap)); - Optional.ofNullable(MapUtils.getString(postfachAddressMap, PostfachAddress.SERVICEKONTO_TYPE_FIELD)) - .ifPresent(postfachAddressBuilder::setServiceKontoType); - return postfachAddressBuilder.build(); - } - - PostfachNachricht fromMapToPostfachMail(Map<String, Object> mailMap) { - var postfachMailBuilder = PostfachNachricht.builder() - .id(MapUtils.getString(mailMap, PostfachNachricht.FIELD_ID)) - .vorgangId(MapUtils.getString(mailMap, (PostfachNachricht.FIELD_VORGANG_ID))) - .postfachId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_POSTFACH_ID, StringUtils.EMPTY)) - .messageId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MESSAGE_ID)) - .createdAt(ZonedDateTime.parse(MapUtils.getString(mailMap, PostfachNachricht.FIELD_CREATED_AT))) - .createdBy(MapUtils.getString(mailMap, PostfachNachricht.FIELD_CREATED_BY)) - .sentAt(getString(mailMap, PostfachNachricht.FIELD_SENT_AT).map(ZonedDateTime::parse).orElse(null)) - .sentSuccessful(MapUtils.getBoolean(mailMap, PostfachNachricht.FIELD_SENT_SUCCESSFUL)) - .messageCode(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MESSAGE_CODE)) - .direction(Direction.valueOf(MapUtils.getString(mailMap, PostfachNachricht.FIELD_DIRECTION))) - .subject(MapUtils.getString(mailMap, PostfachNachricht.FIELD_SUBJECT)) - .mailBody(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MAIL_BODY)) - .replyOption(PostfachNachricht.ReplyOption.valueOf(MapUtils.getString(mailMap, PostfachNachricht.FIELD_REPLY_OPTION))) - .attachments(getAsList(mailMap, PostfachNachricht.FIELD_ATTACHMENTS)); - - Optional.ofNullable(getAsMap(mailMap, PostfachNachricht.POSTFACH_ADDRESS_FIELD)) - .filter(MapUtils::isNotEmpty) - .map(this::buildPostfachAddress) - .ifPresent(postfachMailBuilder::postfachAddress); - - return postfachMailBuilder.build(); - } - - private Optional<String> getString(Map<String, Object> mailMap, String key) { - return Optional.ofNullable(MapUtils.getString(mailMap, key)); - } - - @SuppressWarnings("unchecked") - private List<String> getAsList(Map<String, Object> mailMap, String fieldName) { - return (List<String>) mailMap.getOrDefault(fieldName, Collections.emptyList()); - } - - PostfachAddress buildPostfachAddress(Map<String, Object> postfachAddressMap) { - return PostfachAddress.builder() - .type(MapUtils.getIntValue(postfachAddressMap, PostfachAddress.TYPE_FIELD)) - .version(MapUtils.getString(postfachAddressMap, PostfachAddress.VERSION_FIELD)) - .identifier(buildIdentifier(postfachAddressMap)) - .serviceKontoType(MapUtils.getString(postfachAddressMap, PostfachAddress.SERVICEKONTO_TYPE_FIELD)) - .build(); - } - - PostfachAddressIdentifier buildIdentifier(Map<String, Object> postfachAddressMap) { - return StringBasedIdentifier.builder().postfachId(getPostfachId(postfachAddressMap)).build(); - } - - private String getPostfachId(Map<String, Object> postfachAddressMap) { - var identifier = getAsMap(postfachAddressMap, PostfachAddress.IDENTIFIER_FIELD); - return MapUtils.getString(identifier, PostfachNachricht.FIELD_POSTFACH_ID); - - } - - @SuppressWarnings("unchecked") - Map<String, Object> getAsMap(Map<String, Object> map, String fieldName) { - return MapUtils.getMap(map, fieldName, Collections.emptyMap()); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRemoteService.java deleted file mode 100644 index be4e1c28a4027bd3c39f507dfe1a95bcfecdb8a0..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRemoteService.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import java.util.stream.Stream; - -public interface PostfachRemoteService { - - void sendMessage(PostfachNachricht nachricht); - - Stream<PostfachNachricht> getAllMessages(); - - void deleteMessage(String messageId); - - String getPostfachType(); - - boolean isReplyAllowed(); -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRuntimeException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRuntimeException.java deleted file mode 100644 index c77551d186e651867b76f0bfd0d4a14b43550055..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRuntimeException.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -public class PostfachRuntimeException extends PostfachException {// NOSONAR - - private static final long serialVersionUID = 1L; - - public PostfachRuntimeException(Throwable cause) { - super("Error executing Request to Postfach", PostfachMessageCode.SERVER_CONNECTION_FAILED_MESSAGE_CODE, cause); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachScheduler.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachScheduler.java deleted file mode 100644 index 58dfa87a7ff91e447a0f45574fa67e548df5a70a..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachScheduler.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Profile; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import net.javacrumbs.shedlock.spring.annotation.SchedulerLock; - -@Component -@Profile("!itcase") -@ConditionalOnBean(PostfachRemoteService.class) -@ConditionalOnProperty(name = { "ozgcloud.osi.postfach.scheduler.enabled" }) -class PostfachScheduler { - - @Autowired - private PostfachService service; - - @Scheduled(initialDelayString = "${ozgcloud.osi.postfach.scheduler.initialDelay:5000}", // - fixedDelayString = "${ozgcloud.osi.postfach.scheduler.fixedDelay:900000}") - @SchedulerLock(name = "PostfachScheduler") - void runGetMessagesTask() { - service.fetchAndPersistReplies(); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java deleted file mode 100644 index c00faf36947a9ca9b608e65ae794025e0be89fbc..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import java.time.ZonedDateTime; -import java.util.EnumSet; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.function.Predicate; -import java.util.stream.Stream; - -import jakarta.validation.Valid; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import de.ozgcloud.nachrichten.antragraum.AntragraumService; -import de.ozgcloud.nachrichten.attributes.ClientAttributeService; -import de.ozgcloud.nachrichten.info.InfoManagerService; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption; -import de.ozgcloud.nachrichten.postfach.osi.OsiPostfachServerProcessException; -import de.ozgcloud.vorgang.callcontext.CurrentUserService; -import lombok.NonNull; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@Service -@Validated -class PostfachService { - - private static final Predicate<PostfachNachricht> IS_FROM_HUMAN_USER = nachricht -> !StringUtils.startsWith(nachricht.getCreatedBy(), "system"); - private static final Set<String> POSTFACH_TYPES_WITH_ANTRAGSRAUM = Set.of("BayernId"); - - @Autowired(required = false) - private PostfachRemoteService postfachRemoteService; - - private static final Set<ReplyOption> REPLY_POSSIBLE_OPTION = EnumSet.of(ReplyOption.POSSIBLE, ReplyOption.MANDATORY); - - @Autowired - private PostfachNachrichtMapper mapper; - - @Autowired - private PersistPostfachNachrichtService persistingService; - @Autowired - private ClientAttributeService clientAttributeService; - - @Autowired - private ApplicationEventPublisher publisher; - - @Autowired - private CurrentUserService userService; - - @Autowired - private Optional<InfoManagerService> infomanagerService; - @Autowired - private Optional<AntragraumService> antragraumService; - - public void saveDraft(String vorgangId, PostfachNachricht nachricht) { - persistMail(userService.getUser().getUserId(), - nachricht.toBuilder().vorgangId(vorgangId) - .createdBy(userService.getUser().getUserId().orElse(null)) - .build()); - } - - public void sendMail(String commandId, String userId, @Valid PostfachNachricht mail) { - var sendResponse = handleSendMail(commandId, mail); - persistSentMail(userId, addMailSentInformation(mail, sendResponse)); - } - - PostfachNachricht addMailSentInformation(PostfachNachricht mail, SendPostfachNachrichtResponse sendResponse) { - return mail.toBuilder().sentAt(ZonedDateTime.now()).sentSuccessful(sendResponse.isSentSuccessful()) - .messageCode(sendResponse.getMessageCode().getMessageCode()) - .build(); - } - - void persistSentMail(@NonNull String userId, PostfachNachricht mail) { - persistMail(Optional.of(userId), mail.toBuilder() - .direction(Direction.OUT) - .createdAt(ZonedDateTime.now().withNano(0)).createdBy(userId) - .build()); - - } - - public Optional<Map<String, Object>> findById(String nachrichtId) { - return persistingService.findById(nachrichtId); - } - - public Stream<Map<String, Object>> findByVorgang(String vorgangId) { - return persistingService.findByVorgangAsMap(vorgangId); - } - - public void fetchAndPersistReplies() { - ifPostfachConfigured(() -> postfachRemoteService.getAllMessages().forEach(this::persistReceivedMail)); - } - - private void persistReceivedMail(PostfachNachricht nachricht) { - persistMail(Optional.empty(), nachricht); - clientAttributeService.setHasNewPostfachNachricht(nachricht.getVorgangId()); - - postfachRemoteService.deleteMessage(nachricht.getMessageId()); - } - - void persistMail(Optional<String> userId, PostfachNachricht mail) { - persistingService.persistNachricht(userId, mail); - - if (IS_FROM_HUMAN_USER.test(mail)) { - clientAttributeService.setHasPostfachNachricht(mail.getVorgangId()); - } - } - - public void resendMail(String commandId, String postfachMailId) { - PostfachNachricht nachricht = mapper.fromMapToPostfachMail(persistingService.getById(postfachMailId)); - - var sendResponse = handleSendMail(commandId, nachricht); - patchMail(nachricht.getId(), createResendPatchMap(sendResponse)); - } - - SendPostfachNachrichtResponse handleSendMail(String commandId, PostfachNachricht mail) { - try { - var processedPostfachNachricht = processForAntragsraum(mail).orElse(mail); - doSendMail(processedPostfachNachricht); - - publishMailSentEvent(commandId); - return buildSendNachrichtResponse(true, PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE); - } catch (OsiPostfachServerProcessException e) { - return proceedwithWarnException(commandId, e); - - } catch (PostfachException e) { - return proceedWithErrorException(commandId, e); - } - } - - Optional<PostfachNachricht> processForAntragsraum(PostfachNachricht mail) { - if (isNotifyAntragsraum(mail.getReplyOption())) { - infomanagerService.ifPresent(infoManager -> infoManager.notifyInfoManager(mail)); - return adjustMail(mail); - } - return Optional.empty(); - } - - boolean isNotifyAntragsraum(ReplyOption replyOption) { - return REPLY_POSSIBLE_OPTION.contains(replyOption) && isPostfachWithAntragsraum(postfachRemoteService); - } - - Optional<PostfachNachricht> adjustMail(PostfachNachricht nachricht) { - return antragraumService.map(antragraum -> nachricht.toBuilder().mailBody(antragraum.getUserNotificationText()).build()); - } - - SendPostfachNachrichtResponse proceedwithWarnException(String commandId, OsiPostfachServerProcessException e) { - LOG.warn(e.getMessage(), e); - return proceedWithException(commandId, e); - } - - SendPostfachNachrichtResponse proceedWithErrorException(String commandId, PostfachException e) { - LOG.error(e.getMessage(), e); - return proceedWithException(commandId, e); - } - - private SendPostfachNachrichtResponse proceedWithException(String commandId, PostfachException e) { - publishMailSentFailedEvent(commandId, e.getMessage()); - return buildSendNachrichtResponse(false, e.getMessageCode()); - - } - - void doSendMail(PostfachNachricht nachricht) { - ifPostfachConfigured(() -> postfachRemoteService.sendMessage(nachricht)); - } - - private void publishMailSentEvent(String commandId) { - publisher.publishEvent(new PostfachMailSentEvent(commandId)); - } - - public void publishMailSentFailedEvent(String commandId, String message) { - publisher.publishEvent(new PostfachMailSentFailedEvent(commandId, message)); - } - - private SendPostfachNachrichtResponse buildSendNachrichtResponse(boolean sentSuccesful, PostfachMessageCode messageCode) { - return SendPostfachNachrichtResponse.builder().sentSuccessful(sentSuccesful).messageCode(messageCode).build(); - } - - Map<String, Object> createResendPatchMap(SendPostfachNachrichtResponse sendResponse) { - return Map.of(PostfachNachricht.FIELD_SENT_AT, ZonedDateTime.now().withNano(0).toString(), - PostfachNachricht.FIELD_SENT_SUCCESSFUL, sendResponse.isSentSuccessful(), - PostfachNachricht.FIELD_MESSAGE_CODE, sendResponse.getMessageCode().getMessageCode()); - } - - private void patchMail(String postfachMailId, Map<String, Object> propertyMap) { - persistingService.patch(postfachMailId, propertyMap); - } - - public boolean isPostfachConfigured() { - return postfachRemoteService != null; - } - - public Stream<Postfach> getPostfachs() { - return isPostfachConfigured() ? Stream.of(buildPostfach(postfachRemoteService)) : Stream.empty(); - } - - Postfach buildPostfach(PostfachRemoteService postfachRemoteService) { - return Postfach.builder().type(postfachRemoteService.getPostfachType()).isReplyAllowed(isReplyAllowed(postfachRemoteService)).build(); - } - - boolean isReplyAllowed(PostfachRemoteService postfachRemoteService) { - return isPostfachWithAntragsraum(postfachRemoteService) || postfachRemoteService.isReplyAllowed(); - } - - boolean isPostfachWithAntragsraum(PostfachRemoteService postfachRemoteService) { - return POSTFACH_TYPES_WITH_ANTRAGSRAUM.contains(postfachRemoteService.getPostfachType()) && infomanagerService.isPresent(); - } - - private void ifPostfachConfigured(Runnable block) { - if (!isPostfachConfigured()) { - throw new NotConfiguredException(); - } - block.run(); - } - -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponse.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponse.java deleted file mode 100644 index 841d4b9b32b0d1b2cf391ed6e9ec2ecaa08ae144..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponse.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -@AllArgsConstructor -class SendPostfachNachrichtResponse { - private boolean sentSuccessful; - private PostfachMessageCode messageCode; -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java deleted file mode 100644 index da37d0e5d7c1c788f3a9ab2a4af4b1f0215d2a51..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java +++ /dev/null @@ -1,11 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class StringBasedIdentifier implements PostfachAddressIdentifier { - - private String postfachId; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/Absender.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/Absender.java deleted file mode 100644 index cdf3b85f3e35e788143069296b2d07a565c728fb..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/Absender.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.Pattern; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -@AllArgsConstructor -class Absender { - @Pattern(regexp = "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}") - private String postkorbId; - @NotBlank - private String name; - private String anschrift; - @NotBlank - private String dienst; - @NotBlank - private String mandant; - private String gemeindeSchluessel; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachment.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachment.java deleted file mode 100644 index 1e248904d60e5a6115b25011c02ea1e5755ab494..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachment.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.bayernid; - -import java.io.InputStream; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class BayernIdAttachment { - - private String fileName; - private String contentType; - private InputStream content; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java deleted file mode 100644 index 0110fcc97ad21678c6c98d0871ff129feef6c52a..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.bayernid; - -import java.io.InputStream; -import java.util.Optional; - -import org.bson.Document; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Service; - -import com.mongodb.client.gridfs.model.GridFSFile; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.BinaryFileService; -import de.ozgcloud.nachrichten.postfach.FileId; - -@Service -@ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" }) -public class BayernIdAttachmentService { - - static final String NAME_KEY = "name"; - static final String CONTENT_TYPE_KEY = "contentType"; - - @Autowired - private BinaryFileService binaryFileService; - - public BayernIdAttachment getMessageAttachment(FileId fileId) { - return Optional.ofNullable(binaryFileService.getFile(fileId)) - .map(GridFSFile::getMetadata) - .map(metadata -> buildBayernIdAttachment(metadata, getAttachmentContentStream(fileId))) - .orElseThrow(() -> new TechnicalException("Can not find attachment with id " + fileId)); - } - - BayernIdAttachment buildBayernIdAttachment(Document metadata, InputStream attachmentContent) { - return BayernIdAttachment.builder() - .fileName(metadata.getString(NAME_KEY)) - .contentType(metadata.getString(CONTENT_TYPE_KEY)) - .content(attachmentContent) - .build(); - } - - InputStream getAttachmentContentStream(FileId fileId) { - return binaryFileService.getUploadedFileStream(fileId); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java deleted file mode 100644 index 3224a98caece162ca3f6615210b9073c796b8028..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java +++ /dev/null @@ -1,73 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import java.time.ZonedDateTime; -import java.util.GregorianCalendar; -import java.util.Objects; - -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; - -import org.mapstruct.Condition; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.ReportingPolicy; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.PostfachAddress; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.StringBasedIdentifier; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAbsender; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachmentMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; - -@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) -interface BayernIdPostfachNachrichtMapper { - - String MESSAGE_LEVEL = "LEVEL_1"; - - @Mapping(target = "attachments", ignore = true) - @Mapping(target = "messageMetadata", expression = "java(toBayernIdMessageMetadata(nachricht, absender))") - GrpcSendBayernIdMessageRequest toSendBayernIdMessageMetadataRequest(PostfachNachricht nachricht, Absender absender); - - @Mapping(target = "messageId", source = "nachricht.messageId") - @Mapping(target = "createdAt", expression = "java(convertZonedDateTime(nachricht.getCreatedAt()))") - @Mapping(target = "subject", source = "nachricht.subject") - @Mapping(target = "storkQaaLevel", constant = MESSAGE_LEVEL) - @Mapping(target = "vorgangId", source = "nachricht.vorgangId") - @Mapping(target = "text", source = "nachricht.mailBody") - @Mapping(target = "empfaenger.postkorbId", source = "nachricht.postfachAddress") - GrpcBayernIdMessageMetadata toBayernIdMessageMetadata(PostfachNachricht nachricht, Absender absender); - - @Mapping(target = "gemeindeschluessel", source = "gemeindeSchluessel") - GrpcAbsender toAbsender(Absender absender); - - @Mapping(target = "messageMetadata", ignore = true) - @Mapping(target = "attachments.content", ignore = true) - @Mapping(target = "attachments.attachmentMetadata", expression = "java(toAttachmentMetadata(bayernIdAttachment))") - GrpcSendBayernIdMessageRequest toSendBayernIdAttachmentsMetadataRequest(BayernIdAttachment bayernIdAttachment); - - @Mapping(target = "fileType", source = "contentType") - GrpcAttachmentMetadata toAttachmentMetadata(BayernIdAttachment attachment); - - default String convertZonedDateTime(ZonedDateTime zonedDateTime) { - try { - return DatatypeFactory.newInstance().newXMLGregorianCalendar(GregorianCalendar.from(zonedDateTime)).toString(); - } catch (DatatypeConfigurationException e) { - throw new TechnicalException("Error creating XMLGregorianCalendar which should not happen in this case.", e); - } - } - - BayernIdResponse fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponse response); - - default String toPostkorbId(PostfachAddress postfachAddress) { - return ((StringBasedIdentifier) postfachAddress.getIdentifier()).getPostfachId(); - } - - @Condition - default boolean nonNull(String value) { - return Objects.nonNull(value); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteService.java deleted file mode 100644 index 33915314af41b8e4ddd75c824083cb7cfe311e6b..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteService.java +++ /dev/null @@ -1,132 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.function.BiFunction; -import java.util.function.Function; -import java.util.stream.Stream; - -import jakarta.annotation.PostConstruct; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Component; - -import com.google.protobuf.ByteString; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.FileId; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachRemoteService; -import de.ozgcloud.nachrichten.postfach.PostfachRuntimeException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.BayernIdProxyServiceGrpc.BayernIdProxyServiceStub; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachments; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; -import io.grpc.stub.CallStreamObserver; -import io.grpc.stub.StreamObserver; -import lombok.extern.log4j.Log4j2; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Log4j2 -@ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" }, havingValue = "true") -@Component -class BayernIdPostfachRemoteService implements PostfachRemoteService { - - static final String POSTFACH_TYPE = "BayernId"; - - @GrpcClient("bayern-id") - private BayernIdProxyServiceStub bayernIdProxyServiceStub; - - @Autowired - private BayernIdProperties bayernIdProperties; - @Autowired - private BayernIdPostfachResponseHandler responseHandler; - @Autowired - private BayernIdPostfachNachrichtMapper mapper; - @Autowired - private BayernIdAttachmentService bayernIdAttachmentService; - - @PostConstruct - void init() { - LOG.info("BayernID Postfach remote service initialized."); - } - - @Override - public void sendMessage(PostfachNachricht nachricht) { - try { - var sender = createMessageWithFilesSender(nachricht).send(); - var response = waitUntilTransferCompleted(sender); - responseHandler.handleResponse(mapper.fromSendBayernIdMessageResponse(response)); - } catch (BayernIdServerException e) { - throw e; - } catch (RuntimeException e) { - throw new PostfachRuntimeException(e); - } - } - - MessageWithFilesSender createMessageWithFilesSender(PostfachNachricht nachricht) { - return MessageWithFilesSender.builder() - .reqObserverBuilder(buildCallStreamObserverBuilder()) - .messageMetadata(mapper.toSendBayernIdMessageMetadataRequest(nachricht, bayernIdProperties.getAbsender())) - .attachmentIds(nachricht.getAttachments()) - .toAttachment(buildAttachmentBuilder()) - .attachmentMetadataMapper(buildAttachmentMetadataMapper()) - .chunkBuilder(buildChunkRequest()) - .build(); - } - - Function<StreamObserver<GrpcSendBayernIdMessageResponse>, CallStreamObserver<GrpcSendBayernIdMessageRequest>> buildCallStreamObserverBuilder() { - return responseObserver -> - (CallStreamObserver<GrpcSendBayernIdMessageRequest>) bayernIdProxyServiceStub.sendMessageAsStream(responseObserver); - } - - Function<String, BayernIdAttachment> buildAttachmentBuilder() { - return attachmentId -> bayernIdAttachmentService.getMessageAttachment(FileId.from(attachmentId)); - } - - BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> buildChunkRequest() { - return (bytes, length) -> GrpcSendBayernIdMessageRequest.newBuilder() - .setAttachments(GrpcAttachments.newBuilder().setContent(ByteString.copyFrom(bytes, 0, length)).build()) - .build(); - } - - Function<BayernIdAttachment, GrpcSendBayernIdMessageRequest> buildAttachmentMetadataMapper() { - return mapper::toSendBayernIdAttachmentsMetadataRequest; - } - - GrpcSendBayernIdMessageResponse waitUntilTransferCompleted(MessageWithFilesSender sender) { - try { - return sender.getResultFuture().get(2, TimeUnit.MINUTES); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - sender.cancelOnError(e); - throw new TechnicalException("Waiting for finishing upload was interrupted.", e); - } catch (ExecutionException | TimeoutException e) { - sender.cancelOnTimeout(); - throw new TechnicalException("Error / Timeout on uploading data.", e); - } - } - - @Override - public Stream<PostfachNachricht> getAllMessages() { - throw new UnsupportedOperationException("Bayern ID doesn't support this operation."); - } - - @Override - public void deleteMessage(String messageId) { - throw new UnsupportedOperationException("Bayern ID doesn't support this operation."); - } - - @Override - public String getPostfachType() { - return POSTFACH_TYPE; - } - - @Override - public boolean isReplyAllowed() { - return false; - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandler.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandler.java deleted file mode 100644 index 86b970880b589f65af7e416196cc936ebed7ce63..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandler.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Component; - -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@Component -@ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" }) -class BayernIdPostfachResponseHandler { - - public void handleResponse(BayernIdResponse bayernIdResponse) { - if (bayernIdResponse.isSuccess()) { - return; - } - var message = StringUtils.defaultIfBlank(bayernIdResponse.getMessage(), "Cannot send message to BayernID."); - throw new BayernIdServerException(message, MailSendingResponseStatus.fromSchluessel(bayernIdResponse.getStatus())); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdProperties.java deleted file mode 100644 index a4c8d2b271e482447a4e81f761cc262cd42a49b6..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdProperties.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import jakarta.validation.constraints.NotNull; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.ConfigurationPropertiesScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.validation.annotation.Validated; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Validated -@Configuration -@ConfigurationProperties(prefix = "ozgcloud.bayernid") -@ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" }) -@ConfigurationPropertiesScan -class BayernIdProperties { - - @NotNull - private Absender absender; - -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponse.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponse.java deleted file mode 100644 index 329282c745a5416bcc5917e5bdc08285bae5c471..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponse.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class BayernIdResponse { - - private boolean success; - private String status; - private String message; - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdServerException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdServerException.java deleted file mode 100644 index 76b186249315bb80f205b0d9b5cbadd5d7ba9a4a..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdServerException.java +++ /dev/null @@ -1,30 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.ozgcloud.nachrichten.postfach.PostfachException; -import de.ozgcloud.nachrichten.postfach.PostfachMessageCode; - -class BayernIdServerException extends PostfachException { - - static final String TABELLE_NUMMER_EMPFANG_ERGEBNISSTATUS = "9006"; - private static final String ERROR_MESSAGE_TEMPLATE = TABELLE_NUMMER_EMPFANG_ERGEBNISSTATUS + " / %s / %s / %s"; - - private final MailSendingResponseStatus mailSendingResponseStatus; - - public BayernIdServerException(String message) { - super(message, PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE); - this.mailSendingResponseStatus = null; - } - - public BayernIdServerException(String message, MailSendingResponseStatus mailSendingResponseStatus) { - super(message, PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE); - this.mailSendingResponseStatus = mailSendingResponseStatus; - } - - @Override - public String getMessage() { - if (mailSendingResponseStatus == null) { - return super.getMessage(); - } - return ERROR_MESSAGE_TEMPLATE.formatted(mailSendingResponseStatus.getSchluessel(), mailSendingResponseStatus.getMessage(), super.getMessage()); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSender.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSender.java deleted file mode 100644 index 610b3808b14f417a0ab09edb8f0efc7c4003a2a2..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSender.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid; - -import java.io.IOException; -import java.io.InputStream; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiFunction; - -import org.apache.commons.io.IOUtils; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import io.grpc.stub.CallStreamObserver; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -class FileSender { - - static final int CHUNK_SIZE = 4 * 1024; - - private final AtomicBoolean metaDataSent = new AtomicBoolean(false); - private final AtomicBoolean done = new AtomicBoolean(false); - - private final BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder; - private final CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - private final GrpcSendBayernIdMessageRequest metadata; - private final StreamReader streamReader; - - public FileSender(BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder, - CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver, GrpcSendBayernIdMessageRequest metadata, - InputStream inputStream) { - this.chunkBuilder = chunkBuilder; - this.requestObserver = requestObserver; - this.metadata = metadata; - this.streamReader = new StreamReader(inputStream); - } - - public void send() { - if (!done.get()) { - sendMetadata(); - while (!done.get() && requestObserver.isReady()) { - LOG.debug("Sending next chunk."); - sendNextChunk(); - } - LOG.debug("Finished or waiting to become ready."); - } - } - - void sendMetadata() { - if (metaDataSent.getAndSet(true)) { - return; - } - LOG.debug("Sending Attachment Metadata."); - requestObserver.onNext(metadata); - } - - long sendNextChunk() { - byte[] contentToSend = streamReader.getNextData(); - - if (streamReader.getLastReadSize() > 0) { - sendChunk(contentToSend, streamReader.getLastReadSize()); - } else { - endTransfer(); - } - return contentToSend.length; - } - - void endTransfer() { - done.set(true); - LOG.debug("File Transfer done. Closing stream."); - streamReader.close(); - } - - void sendChunk(byte[] content, int length) { - LOG.debug("Sending {} byte Data.", length); - var chunk = chunkBuilder.apply(content, length); - requestObserver.onNext(chunk); - } - - @RequiredArgsConstructor - class StreamReader { - - private final InputStream inStream; - private final byte[] buffer = new byte[CHUNK_SIZE]; - @Getter - private int lastReadSize = 0; - @Getter - private final AtomicBoolean done = new AtomicBoolean(false); - - byte[] getNextData() { - readNext(); - return buffer; - } - - void close() { - IOUtils.closeQuietly(inStream); - } - - void readNext() { - try { - lastReadSize = inStream.read(buffer, 0, CHUNK_SIZE); - } catch (IOException e) { - throw new TechnicalException("Error on reading a single chunk", e); - } - } - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatus.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatus.java deleted file mode 100644 index f95f2db2a19bc4c51d7872387f380e97b5b4ca97..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatus.java +++ /dev/null @@ -1,43 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -enum MailSendingResponseStatus { - SUCCESS("0", "Nachricht wurde erfolgreich übernommen"), - OK_KOMM_SCHEMA_ERROR("10", "Fehler im OK.KOMM-Schema"), - OK_KOMM_INVALID_SCHEMA_PARAMETER("11", "Ungültige Parameter im OK.KOMM-Schema"), - ERROR_IN_MESSAGE_SCHEMA("20", "Fehler im BSP-Nachrichtenschema"), - INVALID_POSTKORB_ID("30", "Ungültiger Postkorb-Handle"), - IMPROPER_MESSAGE_CONTENT("31", "Unzulässiger Nachrichteninhalt"), - IMPROPER_MESSAGE_ATTACHMENT("32", "Unzulässiger Nachrichtenanhang"), - TECHNICAL_ERROR("99", "Sonstiger technischer Fehler"), - UNKNOWN("-1", "Unbekannte Server Antwort"); - - private String schluessel; - private String message; - - MailSendingResponseStatus(String schluessel, String message) { - this.schluessel = schluessel; - this.message = message; - } - - public static MailSendingResponseStatus fromSchluessel(String schluessel) { - return switch (schluessel) { - case "0" -> MailSendingResponseStatus.SUCCESS; - case "10" -> MailSendingResponseStatus.OK_KOMM_SCHEMA_ERROR; - case "11" -> MailSendingResponseStatus.OK_KOMM_INVALID_SCHEMA_PARAMETER; - case "20" -> MailSendingResponseStatus.ERROR_IN_MESSAGE_SCHEMA; - case "30" -> MailSendingResponseStatus.INVALID_POSTKORB_ID; - case "31" -> MailSendingResponseStatus.IMPROPER_MESSAGE_CONTENT; - case "32" -> MailSendingResponseStatus.IMPROPER_MESSAGE_ATTACHMENT; - case "99" -> MailSendingResponseStatus.TECHNICAL_ERROR; - default -> MailSendingResponseStatus.UNKNOWN; - }; - } - - public String getSchluessel() { - return schluessel; - } - - public String getMessage() { - return message; - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSender.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSender.java deleted file mode 100644 index 29457e1e4f1af0826f45f899cf8aedfdb289aa81..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSender.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid; - -import static java.util.Objects.*; - -import java.util.Collections; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiFunction; -import java.util.function.Function; - -import de.ozgcloud.common.binaryfile.BinaryFileUploadStreamObserver; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; -import io.grpc.stub.CallStreamObserver; -import io.grpc.stub.StreamObserver; -import lombok.Builder; -import lombok.Getter; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@Builder -public class MessageWithFilesSender { - - static final int CHUNK_SIZE = 4 * 1024; - - @Getter - private final CompletableFuture<GrpcSendBayernIdMessageResponse> resultFuture = new CompletableFuture<>(); - private final AtomicBoolean done = new AtomicBoolean(false); - private final AtomicBoolean metaDataSent = new AtomicBoolean(false); - - private final Function<StreamObserver<GrpcSendBayernIdMessageResponse>, CallStreamObserver<GrpcSendBayernIdMessageRequest>> reqObserverBuilder; - private final GrpcSendBayernIdMessageRequest messageMetadata; - @Builder.Default - private final List<String> attachmentIds = Collections.emptyList(); - private final Function<String, BayernIdAttachment> toAttachment; - private final Function<BayernIdAttachment, GrpcSendBayernIdMessageRequest> attachmentMetadataMapper; - private final BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder; - - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - private List<FileSender> fileSenders; - - public MessageWithFilesSender send() { - var responseStreamObserver = BinaryFileUploadStreamObserver.create(resultFuture, this::sendNext); - requestObserver = reqObserverBuilder.apply(responseStreamObserver); - return this; - } - - public void sendNext() { - if (done.get()) { - return; - } - waitForObserver(); - sendMetadata(); - sendAttachments(); - } - - synchronized void waitForObserver() { - while (isNull(requestObserver)) { - try { - LOG.debug("wait for observer"); - wait(300); - } catch (InterruptedException e) { - LOG.error("Error on waiting for request Observer.", e); - Thread.currentThread().interrupt(); - } - } - } - - void sendMetadata() { - if (metaDataSent.getAndSet(true)) { - return; - } - requestObserver.onNext(messageMetadata); - } - - void sendAttachments() { - if (isNull(fileSenders)) { - fileSenders = createFileSenders(); - } - fileSenders.forEach(FileSender::send); - completeRequest(); - } - - List<FileSender> createFileSenders() { - return attachmentIds.stream().map(toAttachment).map(this::buildFileSender).toList(); - } - - FileSender buildFileSender(BayernIdAttachment attachment) { - return new FileSender(chunkBuilder, requestObserver, attachmentMetadataMapper.apply(attachment), attachment.getContent()); - } - - void completeRequest() { - done.set(true); - requestObserver.onCompleted(); - } - - public void cancelOnTimeout() { - LOG.warn("File transfer canceled on timeout"); - resultFuture.cancel(true); - requestObserver.onError(new TechnicalException("Timeout on waiting for upload.")); - } - - public void cancelOnError(Throwable t) { - resultFuture.cancel(true); - requestObserver.onError(t); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java deleted file mode 100644 index 0af5a298f95413a0dc54b169c7a7a9a0159b4b2f..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonValue; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.RequiredArgsConstructor; -import lombok.Singular; -import lombok.ToString; - -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor -@ToString -@Builder -public class Message { - - @RequiredArgsConstructor - public enum EidasLevel { - LOW(0), MEDIUM(1), HIGH(2); - - private final int numValue; - - @JsonValue - public int toValue() { - return numValue; - } - } - - private String messageId; - - @JsonProperty("sequenceNumber") - private String vorgangId; - - @JsonProperty("nameIdentifier") - private String postfachId; - - private String subject; - @JsonProperty("body") - private String mailBody; - - @JsonProperty("isHtml") - private boolean isHtml; - - @JsonProperty("replyAction") - @Builder.Default - private ReplyOption replyOption = ReplyOption.FORBIDDEN; - @Builder.Default - private EidasLevel eidasLevel = EidasLevel.MEDIUM; - - @JsonProperty("isObligatory") - private boolean rechtsverbindlich; - - @Singular - private List<MessageAttachment> attachments; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java deleted file mode 100644 index 58bfba6a02786644e62ec4d78d0fe41883424040..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@ToString -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Getter -public class MessageAttachment { - - private String fileName; - private String content; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java deleted file mode 100644 index c6c2170130d3064b96fcd183ac141eac0f93e890..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.Charset; -import java.util.Base64; - -import org.apache.commons.io.IOUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.AttachmentFile; -import de.ozgcloud.nachrichten.postfach.BinaryFileService; -import de.ozgcloud.nachrichten.postfach.FileId; -import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService; -import lombok.val; - -@Service -public class MessageAttachmentService { - - @Autowired - private PersistPostfachNachrichtService persistPostfachNachrichtService; - - @Autowired - private BinaryFileService binaryFileService; - - public MessageAttachment getMessageAttachment(FileId fileId) { - try { - val metadata = binaryFileService.getFile(fileId).getMetadata(); - return MessageAttachment.builder() - .fileName(metadata.getString("name")) - .content(getAttachmentContent(fileId)) - .build(); - } catch (IOException e) { - throw new TechnicalException(e.getMessage(), e); - } - } - - String getAttachmentContent(FileId fileId) throws IOException { - ByteArrayOutputStream contentStream = new ByteArrayOutputStream(); - IOUtils.copy(getAttachmentContentStream(fileId), contentStream); - return encodeAttachmentContent(contentStream.toByteArray()); - } - - private String encodeAttachmentContent(byte[] content) { - return new String(Base64.getEncoder().encode(content)); - } - - public String persistAttachment(String vorgangId, MessageAttachment attachment) { - return persistPostfachNachrichtService.persistAttachment(vorgangId, mapAttachmentFile(attachment)); - } - - AttachmentFile mapAttachmentFile(MessageAttachment attachment) { - return AttachmentFile.builder() - .name(attachment.getFileName()) - .content(() -> IOUtils.toInputStream(attachment.getContent(), Charset.defaultCharset())).build(); - } - - InputStream getAttachmentContentStream(FileId fileId) { - return binaryFileService.getUploadedFileStream(fileId); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java deleted file mode 100644 index 0664694bb08542c6c1fb9135ef2c6581da264cb3..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.web.client.RestTemplate; - -@Profile("e2e") -@Configuration -public class MockOsiPostfachConfiguration { - - @Bean - public RestTemplate restTemplate() { - return new MockOsiPostfachRestTemplate(); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java deleted file mode 100644 index 364d8bea445f69cebaf1c377516495ce76b4abf2..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; -import org.springframework.web.client.RestClientException; -import org.springframework.web.client.RestTemplate; - -class MockOsiPostfachRestTemplate extends RestTemplate { - - @Override - public <T> ResponseEntity<T> exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables) - throws RestClientException { - return ResponseEntity.ok().build(); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java deleted file mode 100644 index ad900a06ffc7f7a077444f70276d627d2be8a657..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java +++ /dev/null @@ -1,84 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.osi; - -import java.util.List; -import java.util.Optional; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Named; -import org.mapstruct.ReportingPolicy; -import org.springframework.beans.factory.annotation.Autowired; - -import de.ozgcloud.nachrichten.postfach.FileId; -import de.ozgcloud.nachrichten.postfach.PostfachAddress; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.StringBasedIdentifier; - -@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) -public abstract class OsiPostfachMessageMapper { - - private static final String POSTFACH_ADDRESS_VERSION = "1.0"; - private static final int POSTFACH_ADDRESS_TYPE = 1; - - @Autowired - private MessageAttachmentService messageAttachmentService; - - @Mapping(target = "attachment", ignore = true) - @Mapping(target = "isHtml", constant = "true") - @Mapping(target = "rechtsverbindlich", constant = "false") - @Mapping(target = "eidasLevel", constant = "MEDIUM") - @Mapping(target = "postfachId", expression = "java(toPostfachId(nachricht))") - @Mapping(target = "mailBody", qualifiedByName = "replaceNewLine") - public abstract Message toOsiMessage(PostfachNachricht nachricht); - - @Mapping(target = "createdBy", ignore = true) - @Mapping(target = "id", ignore = true) - @Mapping(target = "messageCode", ignore = true) - @Mapping(target = "sentAt", ignore = true) - @Mapping(target = "sentSuccessful", ignore = true) - @Mapping(target = "createdAt", expression = "java(java.time.ZonedDateTime.now())") - @Mapping(target = "direction", constant = "IN") - @Mapping(target = "attachments", expression = "java(persistAttachements(message.getVorgangId() ,message.getAttachments()))") - @Mapping(target = "postfachAddress", expression = "java(buildPostfachAddressByPostfachId(message.getPostfachId()))") - @Mapping(target = "mailBody", qualifiedByName = "clearReceivedMessage") - public abstract PostfachNachricht toPostfachNachricht(Message message); - - List<MessageAttachment> map(List<String> attachedFileIds) { - return attachedFileIds.stream().map(FileId::from).map(fileId -> messageAttachmentService.getMessageAttachment(fileId)).toList(); - } - - List<String> persistAttachements(String vorgangId, List<MessageAttachment> attachments) { - return attachments.stream().map(attachment -> messageAttachmentService.persistAttachment(vorgangId, attachment)).toList(); - } - - @Mapping(target = "attachment", ignore = true) - @Mapping(target = "messageId", ignore = true) - String toPostfachId(PostfachNachricht nachricht) { - return Optional.ofNullable(nachricht.getPostfachAddress()) - .map(PostfachAddress::getIdentifier) - .filter(StringBasedIdentifier.class::isInstance) - .map(StringBasedIdentifier.class::cast) - .map(StringBasedIdentifier::getPostfachId) - .orElse(nachricht.getPostfachId()); - } - - PostfachAddress buildPostfachAddressByPostfachId(String postfachId) { - return PostfachAddress.builder() - .type(POSTFACH_ADDRESS_TYPE) - .version(POSTFACH_ADDRESS_VERSION) - .identifier(StringBasedIdentifier.builder().postfachId(postfachId).build()) - .serviceKontoType(OsiPostfachRemoteService.POSTFACH_TYPE) - .build(); - - } - - @Named("replaceNewLine") - String replaceNewlines(String nachricht) { - return Optional.ofNullable(nachricht).map(str -> str.replaceAll("(\r\n|\n)", "<br>")).orElse(null); - } - - @Named("clearReceivedMessage") - String clearReceivedMessage(String nachricht) { - return Optional.ofNullable(nachricht).map(str -> str.replace("&", "&")).orElse(null); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java deleted file mode 100644 index 5b3b3065f8e50d6e8b52b4a146224b49d6085c1c..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConfigurationProperties(prefix = OsiPostfachProperties.PROXY_API_PREFIX) -public class OsiPostfachProperties { - - static final String PREFIX = "ozgcloud.osi.postfach"; - static final String PROXY_API_PREFIX = PREFIX + ".proxyapi"; - - private String url; - private String key; - private String realm; - - @Autowired - private ProxyConfiguration proxyConfiguration; - - @Getter - @Setter - @Configuration - @ConfigurationProperties(prefix = ProxyConfiguration.PREFIX) - static class ProxyConfiguration { - static final String PREFIX = OsiPostfachProperties.PREFIX + ".http-proxy"; - - private String host; - private Integer port; - - private boolean authenticationRequired; - private String username; - private String password; - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java deleted file mode 100644 index a355f1a63849411bf6ae24c8f9dd73e1b36767c8..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import java.util.Arrays; -import java.util.Objects; -import java.util.function.Supplier; -import java.util.stream.Stream; - -import jakarta.annotation.PostConstruct; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.web.client.HttpClientErrorException; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; - -import de.ozgcloud.nachrichten.postfach.NotConfiguredException; -import de.ozgcloud.nachrichten.postfach.PostfachBadRequestException; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachRemoteService; -import de.ozgcloud.nachrichten.postfach.PostfachRuntimeException; -import lombok.extern.log4j.Log4j2; - -@Service -@Log4j2 -@ConditionalOnProperty(prefix = OsiPostfachProperties.PROXY_API_PREFIX, name = { "url", "key", "realm" }) -class OsiPostfachRemoteService implements PostfachRemoteService { - - static final String POSTFACH_TYPE = "OSI"; - - @Autowired - private OsiPostfachMessageMapper mapper; - @Autowired - private OsiPostfachProperties properties; - @Autowired(required = false) - private RestTemplate restTemplate; - - @PostConstruct - public void init() { - LOG.info("OSI Postfach remote service initialized."); - if (isNotConfigured()) { - LOG.warn("OSI Postfach Api not configured. Failed to read config " + OsiPostfachProperties.PROXY_API_PREFIX); - } - } - - @Override - public void sendMessage(PostfachNachricht nachricht) { - checkWhetherIsConfigured(); - - HttpEntity<Message> request = new HttpEntity<>(mapper.toOsiMessage(nachricht)); - - var response = executeHandlingException( - () -> restTemplate.exchange(properties.getUrl(), HttpMethod.POST, request, String.class)); - - sentFailed(response); - } - - @Override - public Stream<PostfachNachricht> getAllMessages() { - checkWhetherIsConfigured(); - - ResponseEntity<Message[]> response = executeHandlingException( - () -> restTemplate.exchange(properties.getUrl(), HttpMethod.GET, null, Message[].class)); - - if (Objects.isNull(response.getBody())) { - LOG.warn("OSI Postfach response with an empty body"); - return Stream.empty(); - } - return Arrays.stream(response.getBody()).map(mapper::toPostfachNachricht); - } - - private void sentFailed(ResponseEntity<String> response) { - if (isSentFailed(response)) { - throw new OsiPostfachServerProcessException(); - } - } - - private boolean isSentFailed(ResponseEntity<String> response) { - return StringUtils.equals(response.getBody(), String.valueOf(false)); - } - - @Override - public void deleteMessage(String messageId) { - checkWhetherIsConfigured(); - - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(properties.getUrl()).queryParam("messageGuid", messageId); - executeHandlingException(() -> restTemplate.exchange(builder.toUriString(), HttpMethod.DELETE, null, String.class)); - } - - private void checkWhetherIsConfigured() { - if (isNotConfigured()) { - throw new NotConfiguredException(); - } - } - - private boolean isNotConfigured() { - return Objects.isNull(restTemplate) || Objects.isNull(properties.getUrl()) || Objects.isNull(properties.getKey()); - } - - private <T> T executeHandlingException(Supplier<T> runnable) { - try { - return runnable.get(); - } catch (HttpClientErrorException e) { - throw new PostfachBadRequestException(e); - } catch (RuntimeException e) { - throw new PostfachRuntimeException(e); - } - } - - @Override - public String getPostfachType() { - return POSTFACH_TYPE; - } - - @Override - public boolean isReplyAllowed() { - return true; - } - -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java deleted file mode 100644 index 4d2bcf43ff62f5c9d25bad9953a0003027f6a048..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import de.ozgcloud.nachrichten.postfach.PostfachException; -import de.ozgcloud.nachrichten.postfach.PostfachMessageCode; - -public class OsiPostfachServerProcessException extends PostfachException {// NOSONAR - - private static final long serialVersionUID = 1L; - - OsiPostfachServerProcessException() { - super("Postfach server returned false", PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java deleted file mode 100644 index 669c30cfd886152a0de43a5e95a8f8a68295c020..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import java.util.Objects; - -import org.apache.commons.lang3.StringUtils; -import org.apache.hc.client5.http.auth.AuthScope; -import org.apache.hc.client5.http.auth.CredentialsProvider; -import org.apache.hc.client5.http.auth.UsernamePasswordCredentials; -import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider; -import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; -import org.apache.hc.client5.http.impl.classic.HttpClients; -import org.apache.hc.core5.http.HttpHost; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.web.client.RestTemplateBuilder; -import org.springframework.boot.web.client.RestTemplateCustomizer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.web.client.RestTemplate; - -@Profile("!e2e") -@Configuration -public class PostfachConfiguration implements RestTemplateCustomizer { - - static final String HEADER_API_KEY = "apiKey"; - static final String HEADER_API_REALM = "realm"; - - @Autowired - private OsiPostfachProperties properties; - - @Bean - @ConditionalOnProperty(prefix = OsiPostfachProperties.PROXY_API_PREFIX, name = { "url", "key", "realm" }) - public RestTemplate restTemplate(RestTemplateBuilder builder, OsiPostfachProperties properties) { - return builder - .defaultHeader(HEADER_API_KEY, properties.getKey()) - .defaultHeader(HEADER_API_REALM, properties.getRealm()) - .build(); - } - - @Override - public void customize(RestTemplate restTemplate) { - if (StringUtils.isNotBlank(properties.getProxyConfiguration().getHost())) { - setProxy(restTemplate); - } - } - - private void setProxy(RestTemplate restTemplate) { - var proxyConfig = properties.getProxyConfiguration(); - var port = Objects.isNull(proxyConfig.getPort()) ? -1 : proxyConfig.getPort(); - var proxy = new HttpHost(proxyConfig.getHost(), port); - - var httpClient = HttpClientBuilder.create() - .setProxy(proxy).setDefaultCredentialsProvider(buildCredentialsProvider(proxy)) - .build(); - - HttpClients.custom().build(); - restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient)); - } - - private CredentialsProvider buildCredentialsProvider(HttpHost proxyHost) { - var proxyConfig = properties.getProxyConfiguration(); - - if (!proxyConfig.isAuthenticationRequired()) { - return null; - } - - var credsProvider = new BasicCredentialsProvider(); - credsProvider.setCredentials( - new AuthScope(proxyHost), - new UsernamePasswordCredentials(proxyConfig.getUsername(), proxyConfig.getPassword().toCharArray())); - return credsProvider; - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java deleted file mode 100644 index 92fb168058a4f420f318650e7f58f8f13cb27ca3..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.osi; - -import com.fasterxml.jackson.annotation.JsonValue; - -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -public enum ReplyOption { - POSSIBLE(0), MANDATORY(1), FORBIDDEN(2); - - private final int numValue; - - @JsonValue - public int toValue() { - return numValue; - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/nachrichten-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 08abec6c597ed602bc6a36d5de3111b9a0d66a74..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1,20 +0,0 @@ -net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcClientMetricAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcClientHealthAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcClientSecurityAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcClientTraceAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcDiscoveryClientAutoConfiguration -net.devh.boot.grpc.common.autoconfigure.GrpcCommonCodecAutoConfiguration -net.devh.boot.grpc.common.autoconfigure.GrpcCommonTraceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcAdviceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcHealthServiceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataConsulConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataEurekaConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataNacosConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataZookeeperConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcReflectionServiceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerFactoryAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerMetricAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerSecurityAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerTraceAutoConfiguration diff --git a/nachrichten-manager/src/main/resources/application-bayern.yaml b/nachrichten-manager/src/main/resources/application-bayern.yaml deleted file mode 100644 index f8fcba293cb9f21fd400b4f86a3c0320c0fa6aa3..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/resources/application-bayern.yaml +++ /dev/null @@ -1,3 +0,0 @@ -ozgcloud: - antragraum: - entityId: https://antragsraum.ozgcloud.de/ \ No newline at end of file diff --git a/nachrichten-manager/src/main/resources/application-bayernlocal.yaml b/nachrichten-manager/src/main/resources/application-bayernlocal.yaml deleted file mode 100644 index 898a6a6d7a85c34656f5ba0a34611a10025f4962..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/resources/application-bayernlocal.yaml +++ /dev/null @@ -1,7 +0,0 @@ -ozgcloud: - antragraum: - url: https://dev.antragsraum.de/ - entityId: https://antragsraum.ozgcloud.de/ - metadataUri: "classpath:/bayernid/metadata/bayernid-idp-infra.xml" - decryptionPrivateKey: "classpath:/bayernid/bayernid-test-enc.key" - decryptionCertificate: "classpath:/bayernid/bayernid-test-enc.crt" \ No newline at end of file diff --git a/nachrichten-manager/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl b/nachrichten-manager/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl deleted file mode 100644 index a2df76060c0568ed74ed70e6cc71fdc6a9005c98..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl +++ /dev/null @@ -1,108 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<definitions name="PostkorbKommService" - xmlns="http://schemas.xmlsoap.org/wsdl/" - xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" - xmlns:bsp="http://akdb.de/portal/gehaltsabrechnungen-bspnachricht" - xmlns:tns="urn:akdb:bsp:postkorb:komm:webservice" - xmlns:xsd="http://www.w3.org/2001/XMLSchema" - targetNamespace="urn:akdb:bsp:postkorb:komm:webservice"> - <types> - <xs:schema - targetNamespace='urn:akdb:bsp:postkorb:komm:webservice' version='1.1' - xmlns:tns='urn:akdb:bsp:postkorb:komm:webservice' - xmlns:xs='http://www.w3.org/2001/XMLSchema'> - <xs:element name='sendBspNachricht' - type='tns:sendBspNachricht' /> - <xs:complexType name='sendBspNachricht'> - <xs:sequence> - <xs:element minOccurs='1' name='okKommBspNachrichtInput' - type='xs:base64Binary' /> - </xs:sequence> - </xs:complexType> - <xs:element name='sendBspNachrichtOutput' - type='tns:sendBspNachrichtOutput' /> - <xs:complexType name='sendBspNachrichtOutput'> - <xs:sequence> - <xs:element minOccurs='1' - name='okKommBspNachrichtOutput' type='xs:base64Binary' /> - </xs:sequence> - </xs:complexType> - <xs:element name='sendBspNachrichtNative' - type='tns:sendBspNachrichtNative' /> - <xs:complexType name='sendBspNachrichtNative'> - <xs:sequence> - <xs:element minOccurs='1' name='bspNachricht' - type='xs:string' /> - </xs:sequence> - </xs:complexType> - <xs:element name='sendBspNachrichtNativeOutput' - type='tns:sendBspNachrichtNativeOutput' /> - <xs:complexType name='sendBspNachrichtNativeOutput'> - <xs:sequence> - <xs:element minOccurs='1' name='bspQuittung' - type='xs:string' /> - </xs:sequence> - </xs:complexType> - </xs:schema> - </types> - <message name='PostkorbKommService_sendBspNachrichtInput'> - <part element='tns:sendBspNachricht' - name='okKommBspNachrichtInput'></part> - </message> - <message name='PostkorbKommService_sendBspNachrichtOutput'> - <part element='tns:sendBspNachrichtOutput' - name='sendBspNachrichtOutput'></part> - </message> - <message name='PostkorbKommService_sendBspNachrichtNativeInput'> - <part element='tns:sendBspNachrichtNative' - name='sendBspNachrichtNative'></part> - </message> - <message - name='PostkorbKommService_sendBspNachrichtNativeOutput'> - <part element='tns:sendBspNachrichtNativeOutput' - name='bspQuittung'></part> - </message> - <portType name='PostkorbKommPortType'> - <operation name='sendBspNachricht'> - <input message='tns:PostkorbKommService_sendBspNachrichtInput'></input> - <output - message='tns:PostkorbKommService_sendBspNachrichtOutput'></output> - </operation> - <operation name='sendBspNachrichtNative'> - <input - message='tns:PostkorbKommService_sendBspNachrichtNativeInput'></input> - <output - message='tns:PostkorbKommService_sendBspNachrichtNativeOutput'></output> - </operation> - </portType> - <binding name="PostkorbKommBinding" - type="tns:PostkorbKommPortType"> - <soap:binding style="document" - transport="http://schemas.xmlsoap.org/soap/http" /> - <operation name='sendBspNachricht'> - <soap:operation soapAction='' /> - <input> - <soap:body use='literal' /> - </input> - <output> - <soap:body use="literal" /> - </output> - </operation> - <operation name='sendBspNachrichtNative'> - <soap:operation soapAction='' /> - <input> - <soap:body use='literal' /> - </input> - <output> - <soap:body use="literal" /> - </output> - </operation> - </binding> - <service name="PostkorbKommService"> - <port name="PostkorbKommPort" binding="tns:PostkorbKommBinding"> - <!-- <soap:address location="${web-services-base- url}/bspservices/postkorbkomm" - /> --> - <soap:address location="http://localhost:8080/bspx-postkorb-okkomm-ws/bspservices/postkorbkomm" /> - </port> - </service> -</definitions> diff --git a/nachrichten-manager/src/main/resources/bayernid/bspnachrichten-2.13.xsd b/nachrichten-manager/src/main/resources/bayernid/bspnachrichten-2.13.xsd deleted file mode 100644 index 23b0e247d2bd9d2ab3f2206e4354d0c497844f28..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/resources/bayernid/bspnachrichten-2.13.xsd +++ /dev/null @@ -1,343 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - Service- und Portalplattform - AKDB München, Geschäftsfeld eGovernment - - Copyright (c) AKDB - ---> -<xsd:schema targetNamespace="http://www.akdb.de/egov/bsp/nachrichten" - xmlns:xsd="http://www.w3.org/2001/XMLSchema" - xmlns:bsp="http://www.akdb.de/egov/bsp/nachrichten" - elementFormDefault="qualified"> - - <xsd:element name="BspNachricht"> - <xsd:annotation> - <xsd:appinfo> - <title>Nachricht für die Kommunikation zwischen Bürgerservice-Portal - und externen Fachverfahren</title> - </xsd:appinfo> - <xsd:documentation>Einheitliches Nachrichtenschema für die - Kommunikation zwischen Bürgerservice-Portal und externem Verfahren. - Nachrichten vom Bürgerservice-Portal an den Postkorb eines - Verfahrens - oder Nachrichten von den Verfahren an das Bürgerservice-Portal müssen - gemäß diesem Schema aufgebaut sein. - </xsd:documentation> - </xsd:annotation> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="NachrichtenKopf" type="bsp:NachrichtenKopfType"/> - <xsd:element name="NachrichtenInhalt" type="bsp:NachrichtenInhaltType"/> - </xsd:sequence> - <xsd:attribute name="version" use="required"> - <xsd:annotation> - <xsd:documentation>Dieses Attribut kennzeichnet die - Nachrichten-Version, z. B. "1.0", "1.1".</xsd:documentation> - </xsd:annotation> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:enumeration value="1.1"/> - <xsd:enumeration value="1.2"/> - <xsd:enumeration value="1.3"/> - <xsd:enumeration value="1.4"/> - <xsd:enumeration value="1.5"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:attribute> - <xsd:attribute name="fassung" use="required" > - <xsd:annotation> - <xsd:documentation>Dieses Attribut kennzeichnet das Datum, an dem - die diesen Schemata im Status final produziert wurde. Format: - YYYY-MM-DD.</xsd:documentation> - </xsd:annotation> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:enumeration value="2017-03-15"/> - <xsd:enumeration value="2018-04-01"/> - <xsd:enumeration value="2018-11-01"/> - <xsd:enumeration value="2019-06-28"/> - <xsd:enumeration value="2020-03-15"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:attribute> - <xsd:attribute name="produkt" type="xsd:string" use="optional"> - <xsd:annotation> - <xsd:documentation>In diesem Attribut ist der Name des Produktes - (der Software) einzutragen, mit dem diese Nachricht erstellt - worden ist. z.B. BSP, PWS</xsd:documentation> - </xsd:annotation> - </xsd:attribute> - <xsd:attribute name="produkthersteller" type="xsd:string" use="optional"/> - <xsd:attribute name="produktversion" type="xsd:string" use="optional"/> - </xsd:complexType> - </xsd:element> - - <xsd:element name="BspQuittung"> - <xsd:annotation> - <xsd:appinfo> - <title>Quittung über den Empfang einer BSO-Nachricht</title> - </xsd:appinfo> - <xsd:documentation>Zu einer empfangenen BSP-Nachricht wird eine - Quittung geliefert, die bestätigt, dass die Nachricht übernommen wurde - oder aufgrund eines technischen oder fachlichen Fehlers abgewiesen wurde. - </xsd:documentation> - </xsd:annotation> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="AnnahmeErfolgreich" type="xsd:boolean" minOccurs="1" maxOccurs="1"/> - <xsd:element name="ErgebnisStatus" type="bsp:SchluesseltabelleType" minOccurs="1" maxOccurs="1"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9006 (0 (erfolgreich angenommen), 99 (sonstiger technischer Fehler), ...)</xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="ErgaenzendeHinweise" type="xsd:string" minOccurs="0" maxOccurs="1"/> - </xsd:sequence> - <xsd:attribute name="version" use="required"> - <xsd:annotation> - <xsd:documentation>Dieses Attribut kennzeichnet die - Nachrichten-Version, z. B. "1.0", "1.1".</xsd:documentation> - </xsd:annotation> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:enumeration value="1.1"/> - <xsd:enumeration value="1.2"/> - <xsd:enumeration value="1.3"/> - <xsd:enumeration value="1.4"/> - <xsd:enumeration value="1.5"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:attribute> - <xsd:attribute name="fassung" use="required"> - <xsd:annotation> - <xsd:documentation>Dieses Attribut kennzeichnet das Datum, an dem - die diesen Schemata im Status final produziert wurde. Format: - YYYY-MM-DD.</xsd:documentation> - </xsd:annotation> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:enumeration value="2017-03-15"/> - <xsd:enumeration value="2018-04-01"/> - <xsd:enumeration value="2018-11-01"/> - <xsd:enumeration value="2019-06-28"/> - <xsd:enumeration value="2020-03-15"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:attribute> - <xsd:attribute name="produkt" type="xsd:string" use="optional"> - <xsd:annotation> - <xsd:documentation>In diesem Attribut ist der Name des Produktes - (der Software) einzutragen, mit dem diese Nachricht erstellt - worden ist. z.B. BSP, PWS</xsd:documentation> - </xsd:annotation> - </xsd:attribute> - <xsd:attribute name="produkthersteller" type="xsd:string" use="optional"/> - <xsd:attribute name="produktversion" type="xsd:string" use="optional"/> - </xsd:complexType> - </xsd:element> - - <xsd:complexType name="NachrichtenKopfType"> - <xsd:sequence> - <xsd:element name="Identifikation.Nachricht" type="bsp:Identifikation.NachrichtType" maxOccurs="1" minOccurs="1"/> - <xsd:element name="Anwenderkennung" type="xsd:string" minOccurs="0"> - <xsd:annotation> - <xsd:documentation> Die Anwenderkennung stellt Informationen über die absendende Person - zur Verfügung und dient der Protokollierung. - Anhand dieser Kennung kann die absendende Person identifiziert werden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Absender" type="bsp:AbsenderType" maxOccurs="1" minOccurs="1"/> - <xsd:element name="Empfaenger" type="bsp:EmpfaengerType" maxOccurs="1" minOccurs="1"/> - <xsd:element name="AntwortAuf" type="xsd:string" maxOccurs="1" minOccurs="0"> - <xsd:annotation> - <xsd:documentation>Eine Nachricht kann mit einer exisiterenden - Nachricht in Beziehung gebracht werden als Antwortnachricht oder - weitergeleitete Nachricht. Der Bezug erfolgt hierbei über die - NachrichtenId. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="WeiterleitungZu" type="xsd:string" minOccurs="0"/> - <xsd:element name="lesebestaetigungAntwortAdresse" type="xsd:string" minOccurs="0"/> - </xsd:sequence> - </xsd:complexType> - <xsd:complexType name="Identifikation.NachrichtType"> - <xsd:sequence> - <xsd:element name="Ereignis" type="bsp:SchluesseltabelleType"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9001, Schluessel: BspNachricht - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Erstellungszeitpunkt" type="xsd:dateTime" maxOccurs="1" minOccurs="1"/> - <xsd:element name="NachrichtenId" type="xsd:string" maxOccurs="1" minOccurs="1"> - <xsd:annotation> - <xsd:documentation>eine beliebige, eindeutige ID, die durch den - erstellenden Client generiert wird. Zusammen mit - Erstellungszeitpunkt und Absender kann eine Nachricht bsp-global - eindeutig identifiziert werden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="AbsenderType"> - <xsd:sequence> - <xsd:element name="PostkorbId" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Verfahren" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Dienst" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Mandant" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Gemeindeschluessel" type="bsp:SchluesseltabelleType" minOccurs="0"> - <xsd:annotation> - <xsd:documentation>Der amtliche Gemeindeschlüssel (AGS). - Als Tabellennummer ist hier die 36 (OSCI-XMeld-Schlüsseltabelle "Amtlicher Gemeindeschluessel") zu verwenden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Name" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Anschrift" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Email" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Telefon" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Hyperlink" type="xsd:string" maxOccurs="1" minOccurs="0"/> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="EmpfaengerType"> - <xsd:sequence> - <xsd:element name="PostkorbId" type="xsd:string" maxOccurs="1" minOccurs="1"/> - <xsd:element name="Verfahren" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Dienst" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Mandant" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Gemeindeschluessel" type="bsp:SchluesseltabelleType" minOccurs="0"> - <xsd:annotation> - <xsd:documentation>Der amtliche Gemeindeschlüssel (AGS). - Als Tabellennummer ist hier die 36 (OSCI-XMeld-Schlüsseltabelle "Amtlicher Gemeindeschluessel") zu verwenden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Name" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Anschrift" type="xsd:string" maxOccurs="1" minOccurs="0"/> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="NachrichtenInhaltType"> - <xsd:sequence> - <xsd:element name="Betreff" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="1"/> - <xsd:element name="Kategorie" type="bsp:SchluesseltabelleType" minOccurs="0"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9002 (KAT_STATUS, KAT_INFOBSP, ...) - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:choice minOccurs="0"> - <xsd:element name="StorkQaaLevel" type="bsp:StorkQaaLevel"/> - <xsd:element name="NpaGescheutzt" type="xsd:boolean" > - <!-- deprecated, wird durch StorkQaaLevel="STORK-QAA-Level-1" ersetzt --> - <xsd:annotation> - <xsd:documentation> - Diese Nachricht kann im BüsP-Postkorb nur nach - vorheriger Anmeldung mit dem nPA gelesen werden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:choice> - <xsd:element name="ZuVorgang" type="bsp:ZuVorgangType" minOccurs="0"/> - <xsd:element name="FreiText" type="bsp:FreiTextType"/> - <xsd:element name="DataContainer" type="bsp:DataContainerType" minOccurs="0" maxOccurs="unbounded"/> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="ZuVorgangType"> - <xsd:annotation> - <xsd:documentation>VorgangsName oder VorgangsId müssen angegeben - werden. Es können auch beide angegeben werden.</xsd:documentation> - </xsd:annotation> - <xsd:sequence minOccurs="0"> - <xsd:element name="VorgangsName" type="xsd:string"/> - <xsd:element name="VorgangsId" type="xsd:string"/> - <xsd:element name="VorgangStatus" type="bsp:SchluesseltabelleType"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9003 (ST_ERHALTEN, ST_GELESEN,...) - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="FreiTextType"> - <xsd:sequence> - <xsd:element name="Encoding" type="bsp:SchluesseltabelleType" maxOccurs="1" minOccurs="1"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9004 (text/plain, text/html, ...) - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Text" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="1"> - <xsd:annotation> - <xsd:documentation> - Wenn als Encoding text/plain festgelegt ist, so wird die Zeichensequenz "\n" als ein Zeilenvorschub interpretiert. - Das Backslash-Zeichen (\) wird mit einem weiteren Backslash-Zeichen entwertet. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="DataContainerType"> - <xsd:sequence minOccurs="0"> - <xsd:element name="Inhalt" type="xsd:base64Binary" maxOccurs="1" minOccurs="1"/> - <xsd:element name="FileName" maxOccurs="1" minOccurs="0"> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:maxLength value="255"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:element> - <xsd:element name="FileType" type="bsp:SchluesseltabelleType" maxOccurs="1" minOccurs="1"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9005 (application/pdf, text/html, ...) - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="SchluesseltabelleType"> - <xsd:annotation> - <xsd:documentation>Dieser Datentyp wird für Schlüsselwerte benötigt. - Mit dem Datentyp SchluesseltabelleType übermittelt man den Schlüssel - und die Nummer der Tabelle, in der das Schlüssel-Wert Paar definiert - worden ist. - </xsd:documentation> - </xsd:annotation> - <xsd:sequence> - <xsd:element name="Tabelle" type="xsd:string"/> - <xsd:element name="Schluessel" type="xsd:string"/> - </xsd:sequence> - </xsd:complexType> - - <xsd:simpleType name="StorkQaaLevel"> - <xsd:restriction base="xsd:string"> - <!-- since version 1.2 - deprecated --> - <xsd:enumeration value="LEVEL_1"/> - <xsd:enumeration value="LEVEL_2"/> - <xsd:enumeration value="LEVEL_3"/> - <xsd:enumeration value="LEVEL_4"/> - <!-- since version 1.3 --> - <xsd:enumeration value="STORK-QAA-Level-1"/> - <xsd:enumeration value="STORK-QAA-Level-2"/> - <xsd:enumeration value="STORK-QAA-Level-3"/> - <xsd:enumeration value="STORK-QAA-Level-4"/> - </xsd:restriction> - </xsd:simpleType> - <xsd:simpleType name="NonEmptyString"> - <xsd:restriction base="xsd:string"> - <xsd:minLength value="1"/> - </xsd:restriction> - </xsd:simpleType> -</xsd:schema> - - diff --git a/nachrichten-manager/src/main/resources/bayernid/metadata/bayernid-idp-infra.xml b/nachrichten-manager/src/main/resources/bayernid/metadata/bayernid-idp-infra.xml deleted file mode 100644 index ec1ed7ca7099b8be7a8cff7448a740f0b9404c34..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/main/resources/bayernid/metadata/bayernid-idp-infra.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><md:EntitiesDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> - <md:EntityDescriptor entityID="https://infra-pre-id.bayernportal.de/idp"> - <md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> - <md:KeyDescriptor use="signing"> - <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> - <ds:X509Data> - <ds:X509Certificate>MIIFbzCCA1egAwIBAgIJAPdFXXarkBN2MA0GCSqGSIb3DQEBCwUAME4xCzAJBgNV - BAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVuMQ0wCwYD - VQQKDARBS0RCMQwwCgYDVQQLDANJRE0wHhcNMjAxMDI3MTMxODQxWhcNMjUxMDI2 - MTMxODQxWjBOMQswCQYDVQQGEwJERTEPMA0GA1UECAwGQmF5ZXJuMREwDwYDVQQH - DAhNdWVuY2hlbjENMAsGA1UECgwEQUtEQjEMMAoGA1UECwwDSURNMIICIjANBgkq - hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzDtWAEdC3J9FD+ti1exRhN1lzNgKWqO2 - gQNdJvlt7KGHA2VGGO7tqRogTuoqi/ydtiHJ8+lhp4kcWqyfv7i9HXOncvcsRRmR - dZjUY2Iui6ozJqD5LVm/vP5YfdP7vQPdbqyyfpoJhf3mbMEtdNDdGRnGIPUfDn+C - Fbo37f9tPwMgf3jgh4gxaujtLIhhr9gevVTEeZAFu9EvzLNd3kEtRb7MuXqIOdu1 - rW8HlGYFwwVLqEyBn8XG0QAIfhMmGjFMG7z+Kco2quwOmmZVzWQfeH/3AlN2KbcP - t7j+pl+6Bew2AAivP7O+95YKORqQjTu3rPWMF4txPId37MSjoytwBRyd5EACTvhQ - BOGrDFKQUOx6fTtRc8+7XGVz8MdQaZQWQXXh1ByU783twNdnRSrSVIyLdjiy1uCb - jvsSAtbzGBygPIvDo3skCNLNFXsChtHIfFFDK20KPGb0ghEDf2q3hDbFG3ZDGGyn - ZmJcZKuZhJqodJ/++sAXADyTJNAPVYDjKCF4ypELp2Eu/p1gaQPJEb74L/ZFZVOE - JFyXIiaqB9J+fcn/biqHHOmcCi8n9aIiNt1fatr1Z4lQRWoGtKaGU0+bzUSH4Bgs - 2EG4u1CI2MKDWqK2aEsHrtu8tbS9LrUmDVKtaEUOeul8xWVa036vp/YUIdiJNZSx - ZG4iTmSOATECAwEAAaNQME4wHQYDVR0OBBYEFFYeltslkaolOmcINXQeSe7nURwp - MB8GA1UdIwQYMBaAFFYeltslkaolOmcINXQeSe7nURwpMAwGA1UdEwQFMAMBAf8w - DQYJKoZIhvcNAQELBQADggIBAKqAlXoO41SAiycYUOrR90pfwTCysmbtHF5RWSCM - jF2aCG8URJ7bXwC0lBH8E5zCetFZwdqZziQtxzRkIOfhS5uWbH0RDhwuxZG+5RTP - yaHPAZI6e5xHDu8vHl/VbC3lnL/6K8l+Purr/yo8qkJqrPgThZRL9jBQyYRhDSsJ - UyIw5zcKKUQC/JWtMQAQcopbjekCs6xDT1HqIN90Sc/gOfYjNo0dGMNmro9mxcw8 - 2Iow18KNVdtEexfD+/6x4NPD61pzuQEe09TR+Cv3XyzBoGQ/2arijcPnGvth79ff - VFtRSf3fSs7wEKV9g3mEWXFDtPBhDj6K0kKU/kJfEZixkXl92MY+bmugrtTIrazj - tfrgMglIAHu9XCYWd/gef0J+PNfHsxgbTEr3XSC+5/xoFKPQSw3PgV8lkUDq4mJU - Ky/q4YmA37XQxourFR5pWvF03YACdtq6zPjtVeI7Cvkte6k0YW5S3cx9RmPv6YZh - laZ5ERpWNiv6IjokLsvNeemf2PApjO7Q2EDBIoHBYH31wwJSsyRDrSVmbaqLFI15 - fLXeh2A4YbaBDZdGvDiLOAk+dG1wdZ2aGw/uNBzMtc8VeKqI1HPcqIluBA3uUPpy - LLA+9hDPf6Pp4j0gkXxBikz+/h22bFxE1HmDiOSkEn+2NmOHuEFeA+D8jsCAL5VJ - 3emK</ds:X509Certificate> - </ds:X509Data> - </ds:KeyInfo> - </md:KeyDescriptor> - <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat> - <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://infra-pre-id.bayernportal.de/idp/profile/SAML2/POST/SSO"/> - <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://infra-pre-id.bayernportal.de/idp/profile/SAML2/Redirect/SSO"/> - </md:IDPSSODescriptor> - </md:EntityDescriptor> -</md:EntitiesDescriptor> \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java deleted file mode 100644 index 968c13b46cacfbf6528a6f3ac6d750e0154c08f5..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2024. - * 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.nachrichten.antragraum; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.UUID; -import java.util.stream.Stream; - -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.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.vorgang.grpc.command.GrpcCommand; -import io.grpc.stub.StreamObserver; - -class AntragraumGrpcServiceTest { - @Spy - @InjectMocks - private AntragraumGrpcService antragsraumGrpcService; - @Mock - private AntragraumService antragraumService; - @Mock - private AntragraumNachrichtMapper mapper; - - @Nested - class TestFindRueckfragen { - - @Nested - class TestFindRueckfragenGrpc { - @Mock - private StreamObserver<GrpcFindRueckfragenResponse> streamObserver; - - @BeforeEach - void setup() { - when(antragraumService.findRueckfragen(any())).thenReturn(Stream.of(PostfachNachrichtTestFactory.create())); - when(mapper.toGrpc(any(PostfachNachricht.class))).thenReturn(GrpcRueckfrage.getDefaultInstance()); - } - - @Test - void shouldCallMapper() { - antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver); - - verify(mapper).toGrpc(any(PostfachNachricht.class)); - } - - @Test - void shouldCallOnNext() { - antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver); - - verify(streamObserver).onNext(any(GrpcFindRueckfragenResponse.class)); - } - - @Test - void shouldCallOnCompleted() { - antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver); - - verify(streamObserver).onCompleted(); - } - } - } - - @Nested - class TestSendAnswer { - @Mock - private StreamObserver<GrpcCommand> streamObserver; - - @BeforeEach - void setup() { - when(antragraumService.sendRueckfrageAnswer(anyString(), anyString(), any(PostfachNachricht.class))) - .thenReturn(UUID.randomUUID().toString()); - when(mapper.toPostfachNachricht(any(GrpcRueckfrageAnswer.class))).thenReturn(PostfachNachrichtTestFactory.create()); - } - - @Test - void shouldCallMapper() { - antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver); - - verify(mapper).toPostfachNachricht(any(GrpcRueckfrageAnswer.class)); - } - - @Test - void shouldCallAntragraumService() { - antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver); - - verify(antragraumService).sendRueckfrageAnswer(anyString(), anyString(), any(PostfachNachricht.class)); - } - - @Test - void shouldCallOnNext() { - antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver); - - verify(streamObserver).onNext(any(GrpcCommand.class)); - } - - @Test - void shouldCallOnCompleted() { - antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver); - - verify(streamObserver).onCompleted(); - } - - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java deleted file mode 100644 index 5ff78a92ed2d37b75e8c380ea47c87d41a50790c..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) 2024. - * 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.nachrichten.antragraum; - -import static org.assertj.core.api.Assertions.*; - -import java.time.format.DateTimeFormatter; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -class AntragraumNachrichtMapperTest { - - AntragraumNachrichtMapper mapper = Mappers.getMapper(AntragraumNachrichtMapper.class); - - @Nested - class TestMapRueckfrage { - - @Test - void shouldMapVorgangId() { - var result = map(); - - assertThat(result.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldMapId() { - var result = map(); - - assertThat(result.getId()).isEqualTo(PostfachNachrichtTestFactory.ID); - } - - @Test - void shouldMapVorgangName() { - var result = map(); - - assertThat(result.getVorgangName()).isEqualTo(MessageTestFactory.SUBJECT); - } - - @Test - void shouldMapStatus() { - var result = map(); - - assertThat(result.getStatus()).isEqualTo(AntragraumNachrichtMapper.DEFAULT_STATUS); - } - - @Test - void shouldMapSentAt() { - var result = map(); - - assertThat(result.getSentAt()).isEqualTo(PostfachNachrichtTestFactory.SENT_AT.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); - } - - @Test - void shouldMapText() { - var result = map(); - - assertThat(result.getText()).isEqualTo(PostfachNachrichtTestFactory.MAIL_BODY); - } - - @Test - void shouldMapAttachments() { - var result = map(); - - assertThat(result.getAttachmentFileIdCount()).isEqualTo(1); - assertThat(result.getAttachmentFileId(0)).isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS.get(0)); - } - - private GrpcRueckfrage map() { - return mapper.toGrpc(PostfachNachrichtTestFactory.create()); - } - - } - - @Nested - class TestMapAnswerToPostfachNachricht { - @Test - void shouldMapText() { - var result = map(); - - assertThat(result.getMailBody()).isEqualTo(GrpcRueckfrageAnswerTestFactory.TEXT); - } - - @Test - void shouldMapMessageId() { - var result = map(); - - assertThat(result.getMessageId()).isEqualTo(GrpcRueckfrageAnswerTestFactory.RUECKFRAGE_ID); - } - - @Test - void shouldMapAttachmentIds() { - var result = map(); - - assertThat(result.getAttachments()).isEqualTo(GrpcRueckfrageAnswerTestFactory.ATTACHMENT_ID_LIST); - } - - private PostfachNachricht map() { - return mapper.toPostfachNachricht(GrpcRueckfrageAnswerTestFactory.create()); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java deleted file mode 100644 index 1b8cfe1ed00be12d1d23043ef422878b7283f254..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java +++ /dev/null @@ -1,119 +0,0 @@ -package de.ozgcloud.nachrichten.antragraum; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.UUID; - -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 org.opensaml.saml.saml2.core.Response; - -import de.ozgcloud.nachrichten.NachrichtenManagerProperties; -import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; - -class AntragraumServiceTest { - @Spy - @InjectMocks - private AntragraumService service; - - @Mock - private AntragraumProperties properties; - @Mock - private NachrichtenManagerProperties nachrichtenManagerProperties; - @Mock - private PersistPostfachNachrichtService postfachNachrichtService; - @Mock - private Saml2Verifier verifier; - @Mock - private Saml2Parser parser; - @Mock - private Saml2Decrypter decrypter; - - @Nested - class TestGetAntragsraumUrl { - - private static final String URL = "url"; - - @Test - void shouldReturnUrl() { - when(properties.getUrl()).thenReturn(URL); - - var url = service.getAntragsraumUrl(); - - assertThat(url).isEqualTo(URL); - } - - } - - @Nested - class TestFindRueckfragen { - static final String SAML_TOKEN = "TOKEN"; - - @Test - void shouldCallVerify() { - service.findRueckfragen(SAML_TOKEN); - - verify(service).verifyToken(anyString()); - } - - @Test - void shouldCallVerifier() { - service.findRueckfragen(SAML_TOKEN); - - verify(verifier).verify(anyString()); - } - - @Test - void shouldCallDecrypt() { - when(parser.parse(anyString())).thenReturn(mock(Response.class)); - - service.findRueckfragen(SAML_TOKEN); - - verify(decrypter).decryptPostfachId(any(Response.class)); - } - - @Test - void shouldCallPostfachService() { - when(decrypter.decryptPostfachId(any())).thenReturn(GrpcFindRueckfrageRequestTestFactory.POSTFACH_ID); - - service.findRueckfragen(SAML_TOKEN); - - verify(postfachNachrichtService).findRueckfragen(anyString()); - } - } - - @Nested - class TestSendRueckfragenAnswers { - static final String SAML_TOKEN = "TOKEN"; - static final String RUECKFRAGE_ID = UUID.randomUUID().toString(); - static final PostfachNachricht NACHRICHT = PostfachNachrichtTestFactory.create(); - - @Test - void shouldCallVerify() { - service.sendRueckfrageAnswer(SAML_TOKEN, RUECKFRAGE_ID, NACHRICHT); - - verify(service).verifyToken(anyString()); - } - - @Test - void shouldCallVerifier() { - service.findRueckfragen(SAML_TOKEN); - - verify(verifier).verify(anyString()); - } - - @Test - void shouldCallPostfachService() { - service.sendRueckfrageAnswer(SAML_TOKEN, RUECKFRAGE_ID, NACHRICHT); - - verify(postfachNachrichtService).persistAnswer(anyString(), any(PostfachNachricht.class)); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfigurationTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfigurationTest.java deleted file mode 100644 index 045f5caf46429366373499cfd279563895d3d9ad..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfigurationTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2024. - * 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.nachrichten.antragraum; - -import static org.assertj.core.api.Assertions.*; -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.springframework.core.io.InputStreamResource; - -import de.ozgcloud.common.test.TestUtils; - -class BayernIdSamlConfigurationTest { - @Mock - private AntragraumProperties properties; - @InjectMocks - private BayernIdSamlConfiguration bayernIdSamlConfiguration; - - @Nested - class TestCreationOfParserPool { - @BeforeEach - void setup() throws Exception { - bayernIdSamlConfiguration.initOpenSAML(); - } - - @Test - void shouldCreateParserPool() { - assertThat(bayernIdSamlConfiguration.getParserPool()).isNotNull(); - } - } - - @Nested - class TestCreatingTrustEngine { - @BeforeEach - void setup() throws Exception { - when(properties.getMetadataUri()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-idp-infra.xml"))); - when(properties.getEntityId()).thenReturn("https://antragsraum.ozgcloud.de/"); - bayernIdSamlConfiguration.initOpenSAML(); - } - - @Test - void shouldCreateTrustEngine() { - assertThat(bayernIdSamlConfiguration.getTrustEngine()).isNotNull(); - } - } - - @Nested - class TestLoadingVerficationData { - @Test - void shouldCreateVerificationCriteria() { - when(properties.getEntityId()).thenReturn("https://antragsraum.ozgcloud.de/"); - bayernIdSamlConfiguration.initOpenSAML(); - - assertThat(bayernIdSamlConfiguration.getVerificationCriteria()).isNotNull(); - } - - @Test - void shouldLoadVerificationCert() throws Exception { - when(properties.getMetadataUri()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-idp-infra.xml"))); - bayernIdSamlConfiguration.initOpenSAML(); - - assertThat(bayernIdSamlConfiguration.getCertificatesFromMetadata()).isNotNull(); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java deleted file mode 100644 index 9795428ab0d6020b63251d765af3e25e0f89cfa4..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2024. - * 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.nachrichten.antragraum; - -import de.ozgcloud.common.test.TestUtils; - -import java.util.UUID; - -public class GrpcFindRueckfrageRequestTestFactory { - static final String POSTFACH_ID = UUID.randomUUID().toString(); - static final String SAML_TOKEN = TestUtils.loadTextFile("SamlResponse.xml"); - - static GrpcFindRueckfragenRequest create() { - return createBuilder().build(); - } - - static GrpcFindRueckfragenRequest.Builder createBuilder() { - return GrpcFindRueckfragenRequest.newBuilder() - .setPostfachId(POSTFACH_ID) - .setSamlToken(SAML_TOKEN); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcNachrichtTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcNachrichtTestFactory.java deleted file mode 100644 index 1218f303b5e0c3dd25a8d11b30a7aef43adfb0af..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcNachrichtTestFactory.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.ozgcloud.nachrichten.antragraum; - -import de.ozgcloud.info.nachricht.GrpcNachricht; -import de.ozgcloud.nachrichten.info.InfoManagerRequestTestFactory; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -public class GrpcNachrichtTestFactory { - - public static GrpcNachricht create() { - return createBuilder().build(); - } - - public static GrpcNachricht.Builder createBuilder() { - return GrpcNachricht.newBuilder() - .setNachrichtId(PostfachNachrichtTestFactory.ID) - .setVorgangId(MessageTestFactory.VORGANG_ID) - .setPostfachId(MessageTestFactory.POSTFACH_ID) - .setNachrichtenListUrl(InfoManagerRequestTestFactory.NACHRICHTEN_MANAGER_URL); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java deleted file mode 100644 index 6c0fb28f113bc5e179aff00d19a9e5cd5a7a6cc9..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.ozgcloud.nachrichten.antragraum; - -import java.util.List; -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -public class GrpcRueckfrageAnswerTestFactory { - static final String RUECKFRAGE_ID = UUID.randomUUID().toString(); - static final String TEXT = LoremIpsum.getInstance().getParagraphs(2, 4); - static final List<String> ATTACHMENT_ID_LIST = List.of(UUID.randomUUID().toString()); - - static GrpcRueckfrageAnswer create() { - return createBuilder().build(); - } - - static GrpcRueckfrageAnswer.Builder createBuilder() { - return GrpcRueckfrageAnswer.newBuilder() - .setRueckfrageId(RUECKFRAGE_ID) - .setAnswerText(TEXT) - .addAllAttachmentFileId(ATTACHMENT_ID_LIST); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcSendRueckfrageAnswerRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcSendRueckfrageAnswerRequestTestFactory.java deleted file mode 100644 index f1fa9bcfd3877d5bdc17b611f06d373feb565205..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcSendRueckfrageAnswerRequestTestFactory.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.ozgcloud.nachrichten.antragraum; - -import de.ozgcloud.common.test.TestUtils; - -public class GrpcSendRueckfrageAnswerRequestTestFactory { - static final String SAML_TOKEN = TestUtils.loadTextFile("SamlResponse.xml"); - static final GrpcRueckfrageAnswer ANSWER = GrpcRueckfrageAnswerTestFactory.create(); - - static GrpcSendRueckfrageAnswerRequest create() { - return createBuilder().build(); - } - - static GrpcSendRueckfrageAnswerRequest.Builder createBuilder() { - return GrpcSendRueckfrageAnswerRequest.newBuilder() - .setAnswer(ANSWER) - .setSamlToken(SAML_TOKEN); - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2DecrypterTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2DecrypterTest.java deleted file mode 100644 index 1dd94cea3e8ef54e5b7d62ac936921ed583d748b..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2DecrypterTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (c) 2024. - * 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.nachrichten.antragraum; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.opensaml.saml.saml2.core.Attribute; -import org.opensaml.saml.saml2.core.AttributeStatement; -import org.opensaml.saml.saml2.core.Response; -import org.springframework.core.io.InputStreamResource; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.common.test.TestUtils; - -@Disabled("Passende certificat und key file muessen local vorhanden sein") -class Saml2DecrypterTest { - private Response samlResponse; - - @Mock - private AntragraumProperties properties; - - private BayernIdSamlConfiguration configuration; - - private Saml2Decrypter decrypter; - - @BeforeEach - void setup() throws Exception { - when(properties.getDecryptionCertificate()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-test-enc.crt"))); - when(properties.getDecryptionPrivateKey()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-test-enc.key"))); - - configuration = new BayernIdSamlConfiguration(); - ReflectionTestUtils.setField(configuration, "antragraumProperties", properties); - configuration.initOpenSAML(); - - var samlResponseString = TestUtils.loadTextFile("SamlResponse.xml"); - var parser = new Saml2Parser(configuration); - samlResponse = parser.parse(samlResponseString); - - decrypter = new Saml2Decrypter(configuration); - decrypter.init(); - } - - @Test - void shouldDecrypt() { - assertThat(samlResponse.getAssertions()).isEmpty(); - - decrypter.decryptResponseElements(samlResponse); - - assertThat(samlResponse.getAssertions()).isNotEmpty(); - } - - @Test - void shouldHaveSubject() { - decrypter.decryptResponseElements(samlResponse); - var samlAssertion = samlResponse.getAssertions().get(0); - - assertThat(samlAssertion.getSubject()).isNotNull(); - } - - @Test - void shouldHaveAuthnStatements() { - decrypter.decryptResponseElements(samlResponse); - var samlAssertion = samlResponse.getAssertions().get(0); - var authnStatements = samlAssertion.getAuthnStatements(); - - assertThat(authnStatements).isNotNull(); - } - - @Test - void shouldHaveStatements() { - decrypter.decryptResponseElements(samlResponse); - var samlAssertion = samlResponse.getAssertions().get(0); - var statements = samlAssertion.getStatements(); - - assertThat(statements).isNotNull(); - } - - @Test - void shouldHaveAttributes() { - decrypter.decryptResponseElements(samlResponse); - var samlAssertion = samlResponse.getAssertions().get(0); - var statements = (AttributeStatement) samlAssertion.getStatements().get(1); - var attributes = statements.getAttributes(); - assertThat(attributes).hasSize(7); - } - - @Test - void shouldHavePostfachId() { - decrypter.decryptResponseElements(samlResponse); - var samlAssertion = samlResponse.getAssertions().get(0); - var statements = (AttributeStatement) samlAssertion.getStatements().get(1); - var attributes = statements.getAttributes(); - var postfachIdOptional = attributes.stream().filter(attribute -> "legacyPostkorbHandle".equals(attribute.getFriendlyName())).findFirst(); - assertThat(postfachIdOptional).map(Attribute::getAttributeValues).isNotNull(); - } - - @Test - void shouldGetPostfachId() { - var postfachId = decrypter.decryptPostfachId(samlResponse); - - assertThat(postfachId).isEqualTo("28721c6f-b78f-4d5c-a048-19fd2fc429d2"); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2ParserTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2ParserTest.java deleted file mode 100644 index afcca2fbe9c930eebf72c015495ac38f3a3ed2bd..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2ParserTest.java +++ /dev/null @@ -1,72 +0,0 @@ - -package de.ozgcloud.nachrichten.antragraum; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.opensaml.saml.saml2.core.Response; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.common.test.TestUtils; - -class Saml2ParserTest { - private BayernIdSamlConfiguration configuration; - - @BeforeEach - void setup() { - var properties = mock(AntragraumProperties.class); - configuration = new BayernIdSamlConfiguration(); - ReflectionTestUtils.setField(configuration, "antragraumProperties", properties); - configuration.initOpenSAML(); - } - - @Test - void shouldInit() { - var parser = new Saml2Parser(configuration); - - assertThat(parser).isNotNull(); - } - - @Test - void shouldParseSamlToken() throws Exception { - var response = getResponse(); - assertThat(response).isNotNull(); - } - - @Test - void shouldHaveAssertions() throws Exception { - var response = getResponse(); - assertThat(response.getAssertions()).isNotNull(); - } - - @Test - void shouldHaveEncryptedAssertions() throws Exception { - var response = getResponse(); - assertThat(response.getEncryptedAssertions()).isNotNull(); - } - - @Test - void shouldHaveIssuer() throws Exception { - var response = getResponse(); - assertThat(response.getIssuer().getValue()).isEqualTo("https://infra-pre-id.bayernportal.de/idp"); - } - - @Test - void shouldGetXMLObject() throws Exception { - var parser = new Saml2Parser(configuration); - - try (var tokenStream = TestUtils.loadFile("SamlResponse.xml")) { - assertThat(parser.xmlObject(tokenStream)).isNotNull(); - } - } - - private Response getResponse() throws Exception { - var token = TestUtils.loadTextFile("SamlResponse.xml"); - var parser = new Saml2Parser(configuration); - - return parser.parse(token); - } - -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2VerifierTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2VerifierTest.java deleted file mode 100644 index 03dbcb5983d097f1516bdea5bc6f284345d43b15..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2VerifierTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2024. - * 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.nachrichten.antragraum; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.springframework.core.io.InputStreamResource; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.common.test.TestUtils; - -class Saml2VerifierTest { - private String samlResponse; - - private Saml2Verifier verifier; - - @Mock - private AntragraumProperties properties; - - private BayernIdSamlConfiguration configuration; - - @BeforeEach - void setup() throws Exception { - when(properties.getMetadataUri()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-idp-infra.xml"))); - when(properties.getEntityId()).thenReturn("https://antragsraum.ozgcloud.de"); - samlResponse = TestUtils.loadTextFile("SamlResponse.xml"); - - configuration = new BayernIdSamlConfiguration(); - ReflectionTestUtils.setField(configuration, "antragraumProperties", properties); - configuration.initOpenSAML(); - - var parser = new Saml2Parser(configuration); - - verifier = new Saml2Verifier(parser, configuration); - verifier.init(); - } - - @Test - void shouldGetVerificationError() { - var res = verifier.verify(samlResponse); - - assertThat(res).isNotEmpty(); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteServiceTest.java deleted file mode 100644 index bcd766f4b63ed511d3386056e87ccfa54f5340f0..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteServiceTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.attributes; - -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.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest; - -class ClientAttributeRemoteServiceTest { - - @InjectMocks - private ClientAttributeRemoteService remoteService; - @Mock - private ClientAttributeServiceBlockingStub stub; - - @Captor - private ArgumentCaptor<GrpcSetClientAttributeRequest> requestCaptor; - - @BeforeEach - void prepareStubMock() { - when(stub.withInterceptors(any())).thenReturn(stub); - } - - @Nested - class TestSetBooleanReadOnlyClientAttribute { - - @Test - void shouldCallStub() { - callService(); - - verify(stub).set(any()); - } - - @Test - void shouldFillRequest() { - var expectedAttribute = GrpcClientAttributeTestFactory.createBuilder() - .setAccess(GrpcAccessPermission.READ_ONLY) - .setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(true).build()) - .build(); - - var request = callService(); - - assertThat(request).usingRecursiveComparison().isEqualTo(GrpcSetClientAttributeRequestTestFactory.createWithAttribute(expectedAttribute)); - } - - private GrpcSetClientAttributeRequest callService() { - remoteService.setBooleanReadOnlyClientAttribute(GrpcSetClientAttributeRequestTestFactory.VORGANG_ID, - ClientAttributeTestFactory.ATTRIBUTE_NAME, true); - - verify(stub).set(requestCaptor.capture()); - - return requestCaptor.getValue(); - } - } - - @Nested - class TestSetBooleanWritableClientAttribute { - - @Test - void shouldCallStub() { - callService(); - - verify(stub).set(any()); - } - - @Test - void shouldFillRequest() { - var expectedAttribute = GrpcClientAttributeTestFactory.createBuilder() - .setAccess(GrpcAccessPermission.READ_WRITE) - .setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(true).build()) - .build(); - - var request = callService(); - - assertThat(request).usingRecursiveComparison().isEqualTo(GrpcSetClientAttributeRequestTestFactory.createWithAttribute(expectedAttribute)); - } - - private GrpcSetClientAttributeRequest callService() { - remoteService.setBooleanWriteableClientAttribute(GrpcSetClientAttributeRequestTestFactory.VORGANG_ID, - ClientAttributeTestFactory.ATTRIBUTE_NAME, true); - - verify(stub).set(requestCaptor.capture()); - - return requestCaptor.getValue(); - } - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeServiceTest.java deleted file mode 100644 index 6a2bcc8bb843e43ee8199dcbd0c5f42e3ead0f49..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeServiceTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.attributes; - -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -class ClientAttributeServiceTest { - - private static final String VORGANG_ID = "81"; - - @InjectMocks - private ClientAttributeService service; - @Mock - private ClientAttributeRemoteService remoteService; - - @Nested - class TestSetHasNachricht { - - @Test - void shouldCallRemoteService() { - service.setHasPostfachNachricht(VORGANG_ID); - - verify(remoteService).setBooleanReadOnlyClientAttribute(VORGANG_ID, ClientAttributeService.ATTRIBUTE_NAME_HAS_POSTFACH_NACHRICHT, true); - } - } - - @Nested - class TestSetHasNewNachricht { - @Test - void shouldCallRemoteService() { - service.setHasNewPostfachNachricht(VORGANG_ID); - - verify(remoteService).setBooleanWriteableClientAttribute(VORGANG_ID, ClientAttributeService.ATTRIBUTE_NAME_HAS_NEW_POSTFACH_NACHRICHT, - true); - } - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcClientAttributeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcClientAttributeTestFactory.java deleted file mode 100644 index aa74eb83c907c8cc1614aded540f13fc53a3f3de..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcClientAttributeTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.attributes; - -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; - -public class GrpcClientAttributeTestFactory { - - public static final GrpcClientAttribute create() { - return createBuilder().build(); - } - - public static final GrpcClientAttribute.Builder createBuilder() { - return GrpcClientAttribute.newBuilder() - .setAttributeName(ClientAttributeTestFactory.ATTRIBUTE_NAME) - .setAccess(GrpcAccessPermission.READ_WRITE) - .setValue(GrpcClientAttributeValue.newBuilder().setStringValue(ClientAttributeTestFactory.VALUE).build()); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcSetClientAttributeRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcSetClientAttributeRequestTestFactory.java deleted file mode 100644 index 0558b0d9360776e5c6d5b86fb948f30720e29011..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcSetClientAttributeRequestTestFactory.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.attributes; - -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest; - -class GrpcSetClientAttributeRequestTestFactory { - - static final String VORGANG_ID = "55"; - static final GrpcAccessPermission access = GrpcAccessPermission.READ_ONLY; - - public static GrpcSetClientAttributeRequest create() { - return createBuilder().build(); - } - - public static GrpcSetClientAttributeRequest createWithAttribute(GrpcClientAttribute attribute) { - return createBuilder().setAttribute(attribute).build(); - } - - public static GrpcSetClientAttributeRequest.Builder createBuilder() { - return GrpcSetClientAttributeRequest.newBuilder() - .setVorgangId(VORGANG_ID) - .setAttribute(GrpcClientAttributeTestFactory.create()); - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EMailServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EMailServiceTest.java deleted file mode 100644 index f749f48e4f1cd41f07a89f93bcb346eb23686a64..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EMailServiceTest.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -import static de.ozgcloud.nachrichten.email.MailSendRequestTestFactory.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import jakarta.activation.DataSource; -import jakarta.mail.MessagingException; -import jakarta.mail.internet.MimeMessage; - -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 org.springframework.context.ApplicationEventPublisher; -import org.springframework.mail.MailSendException; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.mail.javamail.MimeMessageHelper; - -import lombok.SneakyThrows; - -class EMailServiceTest { - - @Spy // NOSONAR - @InjectMocks - private EMailService service; - - @Mock - private JavaMailSender sender; - @Mock - private ApplicationEventPublisher publisher; - - @Nested - class TestSendingEmail { - - @Nested - class TestSendEmail { - private MailSendRequest request = MailSendRequestTestFactory.create(); - - @Mock // NOSONAR - private MimeMessage message; - - @BeforeEach - void initTest() { - when(sender.createMimeMessage()).thenReturn(message); - } - - @Test - void shouldWriteEmail() { - service.sendEmail(request); - - verify(service).writeEmail(any(), eq(request)); - } - - @Test - void shouldAddAttachments() { - service.sendEmail(request); - - verify(service).addAttachments(any(), eq(request)); - } - - @Test - void shouldSendMessage() { - service.sendEmail(request); - - verify(service).send(message, request); - } - } - - @Nested - class TestWriteEmail { - - @Mock // NOSONAR - private MimeMessageHelper helper; - - private MailSendRequest request = MailSendRequestTestFactory.create(); - - @Test - void shouldSetToAddress() throws MessagingException { - service.writeEmail(helper, request); - - verify(helper).setTo(new String[] { formatMailRecipient(EMAIL_RECIPIENT) }); - } - - @SneakyThrows - @Test - void shouldFormatToEmailAddresses() { - var request = MailSendRequestTestFactory.createBuilder().clearToAddresses().toAddress(EMAIL_RECIPIENT).build(); - - service.writeEmail(helper, request); - - verify(helper).setTo(new String[] { formatMailRecipient(EMAIL_RECIPIENT) }); - } - - @SneakyThrows - @Test - void shouldFormatFromEmailAddresses() { - service.writeEmail(helper, request); - - verify(helper).setFrom(FROM); - } - - @Test - void shouldSetFromAddress() throws MessagingException { - service.writeEmail(helper, request); - - verify(helper).setFrom(MailSendRequestTestFactory.FROM); - } - - @Test - void shouldSetSubject() throws MessagingException { - service.writeEmail(helper, request); - - verify(helper).setSubject(MailSendRequestTestFactory.SUBJECT); - } - - @Test - void shouldSetBody() throws MessagingException { - service.writeEmail(helper, request); - - verify(helper).setText(MailSendRequestTestFactory.BODY); - } - - @Test - void shouldSetReplyTo() throws MessagingException { - service.writeEmail(helper, request); - - verify(helper).setReplyTo(MailSendRequestTestFactory.REPLY_TO); - } - - public static String formatMailRecipient(MailRecipient mailRecipient) { - return EMAIL_ADDRESS_TEMPLATE.formatted(mailRecipient.firstName(), mailRecipient.lastName(), mailRecipient.email()); - } - } - - @Nested - class TestAddAttachments { - - @Mock // NOSONAR - private MimeMessageHelper helper; - - private MailSendRequest request = MailSendRequestTestFactory.create(); - - @Test - void shouldAddInlineAttachment() throws MessagingException { - service.addAttachments(helper, request); - - verify(helper).addAttachment(eq(MailSendRequestTestFactory.ATTACHMENT_NAME), any(DataSource.class)); - } - } - - @Nested - class TestAddHeaders { - @Mock // NOSONAR - private MimeMessage message; - - private MailSendRequest request = MailSendRequestTestFactory.createBuilder().receiptRequired(true).build(); - - @Test - void shouldRequestReceipt() { - service.prepareAndSendMail(message, request); - - verify(service).requestReceipt(any(), any()); - } - - @Test - void shouldNotRequestReceipt() { - MailSendRequest request = MailSendRequestTestFactory.createBuilder().receiptRequired(false).build(); - - service.prepareAndSendMail(message, request); - - verify(service, never()).requestReceipt(any(), any()); - } - - @Nested - class RequestReceipt { - - @Test - void shouldAddReadReceiptToHeader() throws MessagingException { - service.requestReceipt(message, request); - - verify(message).addHeader(EMailService.HEADER_READ_RECEIPT, MailSendRequestTestFactory.FROM); - } - - @Test - void shouldAddConfirmReadingHeader() throws MessagingException { - service.requestReceipt(message, request); - - verify(message).addHeader(EMailService.HEADER_CONFIRM_READING, MailSendRequestTestFactory.FROM); - } - - @Test - void shouldAddDispositionNotificationHeader() throws MessagingException { - service.requestReceipt(message, request); - - verify(message).addHeader(EMailService.HEADER_DISPOSITION_NOTIFICATION, MailSendRequestTestFactory.FROM); - } - } - } - - @Nested - class TestSend { - - @Mock // NOSONAR - private MimeMessage message; - private MailSendRequest request = MailSendRequestTestFactory.create(); - - @Test - void shouldCallSender() { - service.send(message, request); - - verify(sender).send(message); - } - - @Test - void shouldTriggerEvent() { - service.send(message, request); - - verify(publisher).publishEvent(any(MailSentEvent.class)); - } - - @Test - void shouldTriggerEventOnError() { - doThrow(MailSendException.class).when(sender).send(any(MimeMessage.class)); - - service.send(message, request); - - verify(publisher).publishEvent(any(MailSendErrorEvent.class)); - verify(publisher, never()).publishEvent(any(MailSentEvent.class)); - } - } - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EmailGrpcServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EmailGrpcServiceTest.java deleted file mode 100644 index 06d0c091a5577e9add0bcd41703082bd8597a412..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EmailGrpcServiceTest.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -import io.grpc.stub.StreamObserver; -import lombok.SneakyThrows; -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.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.test.util.ReflectionTestUtils; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -class EmailGrpcServiceTest { - - @Mock - private MailService mailService; - - @InjectMocks - private EmailGrpcService emailGrpcService; - - @Nested - @DisplayName("When called send email gRPC endpoint") - class TestSendEmail { - - @Mock - private StreamObserver<GrpcSendEmailResponse> streamObserver; - @Captor - private ArgumentCaptor<MailSendRequest> mailRequestCaptor; - - @BeforeEach - @SneakyThrows - public void init() { - ReflectionTestUtils.setField(emailGrpcService, "mailFrom", MailSendRequestTestFactory.FROM); - } - - @Test - void shouldSendEmail() { - var mailSendRequest = MailSendRequestTestFactory.createBuilder().clearToAddresses() - .toAddress(MailSendRequestTestFactory.EMAIL_RECIPIENT).clearAttachments() - .replyTo(null).requestReference(null).build(); - - emailGrpcService.sendEmail(GrpcNotificationRecipientsTestFactory.create(), streamObserver); - - verify(mailService).sendMail(mailRequestCaptor.capture()); - assertThat(mailRequestCaptor.getValue()).usingRecursiveComparison().isEqualTo(mailSendRequest); - } - - @Test - void shouldSendAllEmail() { - var request = GrpcNotificationRecipientsTestFactory.createBuilder().addRecipients(GrpcRecipientTestFactory.create()).build(); - - emailGrpcService.sendEmail(request, streamObserver); - - verify(mailService, times(2)).sendMail(any()); - } - - @Test - void shouldSendResponse() { - var notification = GrpcNotificationRecipientsTestFactory.create(); - - emailGrpcService.sendEmail(notification, streamObserver); - - verify(streamObserver, times(1)).onNext(GrpcSendEmailResponse.newBuilder().build()); - } - - @Test - void shouldCloseObserver() { - var notification = GrpcNotificationRecipientsTestFactory.create(); - - emailGrpcService.sendEmail(notification, streamObserver); - - verify(streamObserver, times(1)).onCompleted(); - } - } - -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcNotificationRecipientsTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcNotificationRecipientsTestFactory.java deleted file mode 100644 index ec2ac285d3f24c84b1569babc2f6d43413c6dc0b..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcNotificationRecipientsTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -public class GrpcNotificationRecipientsTestFactory { - - public static final GrpcRecipient GRPC_EMAIL_RECIPIENT = GrpcRecipientTestFactory.create(); - - public static GrpcSendEmailRequest create() { - return createBuilder().build(); - } - - public static GrpcSendEmailRequest.Builder createBuilder() { - return GrpcSendEmailRequest.newBuilder() - .setSubject(MailSendRequestTestFactory.SUBJECT) - .setBody(MailSendRequestTestFactory.BODY) - .addRecipients(GRPC_EMAIL_RECIPIENT); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcRecipientTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcRecipientTestFactory.java deleted file mode 100644 index 6b378f8143242cdb832bbd5acd0594d081ba42ef..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcRecipientTestFactory.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -public class GrpcRecipientTestFactory { - - public static GrpcRecipient create() { - return createBuilder().build(); - } - - public static GrpcRecipient.Builder createBuilder() { - return GrpcRecipient.newBuilder() - .setFirstName(MailRecipientTestFactory.FIRST_NAME) - .setLastName(MailRecipientTestFactory.LAST_NAME) - .setEmail(MailSendRequestTestFactory.TO); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailRecipientTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailRecipientTestFactory.java deleted file mode 100644 index b2c567ea471b758ed07897a4fa9eaa9561cbad33..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailRecipientTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -public class MailRecipientTestFactory { - - public static final String FIRST_NAME = "first"; - public static final String LAST_NAME = "last"; - public static final String EMAIL = "default@email.local"; - - public static MailRecipient create() { - return createBuilder().build(); - } - - public static MailRecipient.MailRecipientBuilder createBuilder() { - return MailRecipient.builder() - .firstName(FIRST_NAME) - .lastName(LAST_NAME) - .email(EMAIL); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendErrorEventTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendErrorEventTestFactory.java deleted file mode 100644 index b2b9757a03b5a35fe60cb58782a585857911b0f0..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendErrorEventTestFactory.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -public class MailSendErrorEventTestFactory { - - public static final String ERROR_MSG = "leider kaputt"; - - public static MailSendErrorEvent create(MailSendRequest request) { - return new MailSendErrorEvent(request, ERROR_MSG); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendRequestTestFactory.java deleted file mode 100644 index 3e7fea3f26be53b05dd8e5aeccf7258f4b0c1076..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendRequestTestFactory.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -import java.util.UUID; - -import de.ozgcloud.nachrichten.email.MailSendRequest.MailAttachment; -import jakarta.mail.util.ByteArrayDataSource; - -class MailSendRequestTestFactory { - - public static final String FROM = "from@mailinator.com"; - public static final String TO = "to@mailinator.com"; - - public static final String SUBJECT = "The Subject"; - public static final String BODY = "Lorem ipsum"; - - private static final String REFERENCE = UUID.randomUUID().toString(); - - public static final String ATTACHMENT_NAME = "aFile"; - public static final String ATTACHMENT = "BINARY_BLAH"; - - public static final String REPLY_TO = "replyTo@mailinator.com"; - - public static final MailRecipient EMAIL_RECIPIENT = MailRecipientTestFactory.createBuilder().email(TO).build(); - - public static final String EMAIL_ADDRESS_TEMPLATE = "%s %s <%s>"; - - public static MailSendRequest create() { - return createBuilder().build(); - } - - public static MailSendRequest.MailSendRequestBuilder createBuilder() { - var ds = new ByteArrayDataSource(ATTACHMENT.getBytes(), "plain/text"); - ds.setName(ATTACHMENT_NAME); - - return MailSendRequest.builder() - .fromAddress(FROM) - .toAddress(EMAIL_RECIPIENT) - .subject(SUBJECT) - .body(BODY) - .requestReference(REFERENCE) - .attachment(MailAttachment.builder() - .dataSource(ds) - .build()) - .replyTo(REPLY_TO); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSentEventTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSentEventTestFactory.java deleted file mode 100644 index 599956765d060fe7291d24b4f6cbf6d687daf141..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSentEventTestFactory.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -public class MailSentEventTestFactory { - - public static MailSentEvent create(Object reference) { - - return new MailSentEvent(MailSendRequestTestFactory.createBuilder().requestReference(reference).build()); - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteServiceTest.java deleted file mode 100644 index 1410dd83c2d5f6418cbe4b408f91de93a55356af..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteServiceTest.java +++ /dev/null @@ -1,94 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -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.info.nachricht.GrpcNachricht; -import de.ozgcloud.info.nachricht.GrpcNewNachrichtReply; -import de.ozgcloud.info.nachricht.GrpcNewNachrichtRequest; -import de.ozgcloud.info.nachricht.NachrichtServiceGrpc.NachrichtServiceBlockingStub; - -class InfoManagerRemoteServiceTest { - - @Spy - @InjectMocks - private InfoManagerRemoteService service; - - @Mock - private NachrichtServiceBlockingStub nachrichtServiceStub; - @Mock - private InfomanagerNachrichtMapper nachrichtMapper; - - @Nested - class TestSendNotification { - - private static final String INFO_MANAGER_STATUS = "status"; - - @Mock - private GrpcNewNachrichtRequest grpcRequest; - @Mock - private GrpcNewNachrichtReply grpcReply; - - @BeforeEach - void setup() { - doReturn(grpcRequest).when(service).buildNachrichtRequest(any()); - when(nachrichtServiceStub.saveNewNachricht(any())).thenReturn(grpcReply); - } - - @Test - void shouldCallGrpcClient() { - sendNotification(); - - verify(nachrichtServiceStub).saveNewNachricht(grpcRequest); - } - - @Test - void shouldReturnStatus() { - when(grpcReply.getStatus()).thenReturn(INFO_MANAGER_STATUS); - - var status = sendNotification(); - - assertThat(status).isEqualTo(INFO_MANAGER_STATUS); - } - - private String sendNotification() { - return service.sendNotification(InfoManagerRequestTestFactory.create()); - } - } - - @Nested - class TestBuildNachrichtRequest { - - @Mock - private GrpcNachricht grpcNachricht; - - @BeforeEach - void setup() { - when(nachrichtMapper.toGrpc(any())).thenReturn(grpcNachricht); - } - - @Test - void shouldCallMapper() { - var nachricht = InfoManagerRequestTestFactory.create(); - - service.buildNachrichtRequest(nachricht); - - verify(nachrichtMapper).toGrpc(nachricht); - } - - @Test - void shouldSetNachricht() { - var grpcRequest = service.buildNachrichtRequest(InfoManagerRequestTestFactory.create()); - - assertThat(grpcRequest.getNachricht()).isEqualTo(grpcNachricht); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRequestTestFactory.java deleted file mode 100644 index 0690a65817010332a7bb2a68ad277f0d57192777..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRequestTestFactory.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -public class InfoManagerRequestTestFactory { - - public static final String NACHRICHTEN_MANAGER_URL = "nachrichten-manager"; - - public static InfoManagerRequest create() { - return createBuilder().build(); - } - - private static InfoManagerRequest.InfoManagerRequestBuilder createBuilder() { - return InfoManagerRequest.builder() - .nachrichtId(PostfachNachrichtTestFactory.ID) - .vorgangId(MessageTestFactory.VORGANG_ID) - .postfachId(MessageTestFactory.POSTFACH_ID) - .nachrichtenManagerUrl(NACHRICHTEN_MANAGER_URL); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java deleted file mode 100644 index 95e41db14745b4268f4154f0c7d9a2cee28d907c..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java +++ /dev/null @@ -1,104 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.nachrichten.NachrichtenManagerProperties; -import de.ozgcloud.nachrichten.postfach.PostfachException; -import de.ozgcloud.nachrichten.postfach.PostfachMessageCode; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -class InfoManagerServiceTest { - - @Spy - @InjectMocks - private InfoManagerService service; - - @Mock - private InfoManagerRemoteService infomanagerRemoteService; - @Mock - private NachrichtenManagerProperties nachrichtenManagerProperties; - - @Nested - class TestNotifyInfoManager { - - private static final String NACHRICHTEN_MANAGER_URL = "nachrichtenManagerUrl"; - - private PostfachNachricht postfachNachricht = PostfachNachrichtTestFactory.create(); - - @Test - void shouldCallBuildInfomanagerNachricht() { - service.notifyInfoManager(postfachNachricht); - - verify(service).builInfomanagerRequest(postfachNachricht); - } - - @Test - void shouldCallInfoManagerRemoteService() { - var infomanagerNachricht = InfoManagerRequestTestFactory.create(); - doReturn(infomanagerNachricht).when(service).builInfomanagerRequest(any()); - - service.notifyInfoManager(postfachNachricht); - - verify(infomanagerRemoteService).sendNotification(infomanagerNachricht); - } - - @Test - void shouldThrowPostfachException() { - var causeException = new RuntimeException(); - when(infomanagerRemoteService.sendNotification(any())).thenThrow(causeException); - - var exception = assertThrows(PostfachException.class, () -> service.notifyInfoManager(postfachNachricht)); - assertThat(exception.getMessageCode()).isEqualTo(PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE); - } - - @Nested - class TestBuildInfomanagerNachricht { - - @Test - void shouldSetNachrichtId() { - var request = buildInfomanagerNachricht(); - - assertThat(request.getNachrichtId()).isEqualTo(PostfachNachrichtTestFactory.ID); - } - - @Test - void shouldSetVorgangId() { - var request = buildInfomanagerNachricht(); - - assertThat(request.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldSetPostfachId() { - var request = buildInfomanagerNachricht(); - - assertThat(request.getPostfachId()).isEqualTo(MessageTestFactory.POSTFACH_ID); - } - - @Test - void shouldSetNachrichtenManagerUrl() { - when(nachrichtenManagerProperties.getUrl()).thenReturn(NACHRICHTEN_MANAGER_URL); - - var request = buildInfomanagerNachricht(); - - assertThat(request.getNachrichtenManagerUrl()).isEqualTo(NACHRICHTEN_MANAGER_URL); - } - - private InfoManagerRequest buildInfomanagerNachricht() { - return service.builInfomanagerRequest(postfachNachricht); - } - } - - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapperTest.java deleted file mode 100644 index a9d67291fc58a3b091205f14bd4d6411e02cd925..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapperTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -import de.ozgcloud.info.nachricht.GrpcNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -class InfomanagerNachrichtMapperTest { - - private InfomanagerNachrichtMapper mapper = Mappers.getMapper(InfomanagerNachrichtMapper.class); - - @Test - void shouldMapNachrichtId() { - var result = map(); - - assertThat(result.getNachrichtId()).isEqualTo(PostfachNachrichtTestFactory.ID); - } - - @Test - void shouldMapVorgangId() { - var result = map(); - - assertThat(result.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldMapPostfachId() { - var result = map(); - - assertThat(result.getPostfachId()).isEqualTo(MessageTestFactory.POSTFACH_ID); - } - - @Test - void shouldMapNachrichtenManagerUrl() { - var result = map(); - - assertThat(result.getNachrichtenListUrl()).isEqualTo(InfoManagerRequestTestFactory.NACHRICHTEN_MANAGER_URL); - } - - private GrpcNachricht map() { - return mapper.toGrpc(InfoManagerRequestTestFactory.create()); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachAddressTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachAddressTestFactory.java deleted file mode 100644 index 4e173a0123dca030adb5d4b0a67baa7cf36e2375..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachAddressTestFactory.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import de.ozgcloud.vorgang.common.GrpcObject; -import de.ozgcloud.vorgang.common.GrpcProperty; - -public class GrpcPostfachAddressTestFactory { - - public static GrpcPostfachAddress create() { - return createBuilder().build(); - } - - public static GrpcPostfachAddress.Builder createBuilder() { - return GrpcPostfachAddress.newBuilder() - .setType(PostfachAddressTestFactory.TYPE) - .setIdentifier(createIdentifier()) - .setVersion(PostfachAddressTestFactory.VERSION) - .setServiceKontoType(PostfachTestFactory.POSTFACH_TYPE); - } - - public static GrpcObject createIdentifier() { - return GrpcObject.newBuilder() - .addProperty(GrpcProperty.newBuilder() - .setName(PostfachNachricht.FIELD_POSTFACH_ID) - .addValue(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE) - .build()) - .build(); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachMailTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachMailTestFactory.java deleted file mode 100644 index 7f4399a3ec061bf428ca9b8f117e760d98533052..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachMailTestFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import static de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory.*; -import static de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory.*; - -public class GrpcPostfachMailTestFactory { - - public static GrpcPostfachMail create() { - return createBuilder().build(); - } - - public static GrpcPostfachMail.Builder createBuilder() { - return GrpcPostfachMail.newBuilder() - .setId(ID) - .setVorgangId(VORGANG_ID) - .setPostfachId(POSTFACH_ID) - .setPostfachAddress(GrpcPostfachAddressTestFactory.create()) - .setCreatedAt(CREATED_AT_STR) - .setCreatedBy(CREATED_BY) - .setSentAt(SENT_AT_STR) - .setSentSuccessful(SENT_SUCCESSFUL) - .setMessageCode(MESSAGE_CODE) - .setDirection(GrpcDirection.valueOf(DIRECTION.name())) - .setSubject(SUBJECT) - .setMailBody(PostfachNachrichtTestFactory.MAIL_BODY) - .setReplyOption(PostfachNachrichtTestFactory.REPLY_OPTION.name()) - .addAllAttachment(PostfachNachrichtTestFactory.ATTACHMENTS); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcResendPostfachMailRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcResendPostfachMailRequestTestFactory.java deleted file mode 100644 index 74968834e0528a9ee4fcc8968195a2973aa35ed6..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcResendPostfachMailRequestTestFactory.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import java.util.UUID; - -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; -import de.ozgcloud.vorgang.grpc.command.GrpcUser; - -public class GrpcResendPostfachMailRequestTestFactory { - - public static final String COMMAND_ID = UUID.randomUUID().toString(); - public static final String USER_ID = UUID.randomUUID().toString(); - - public static GrpcResendPostfachMailRequest create() { - return createBuilder().build(); - } - - public static GrpcResendPostfachMailRequest.Builder createBuilder() { - return GrpcResendPostfachMailRequest.newBuilder() - .setContext(GrpcCallContext.newBuilder().setUser(GrpcUser.newBuilder().setId(USER_ID).build()).build()) - .setCommandId(COMMAND_ID) - .setPostfachMailId(PostfachNachrichtTestFactory.ID); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java deleted file mode 100644 index 0c5a79c00147ea8050c4b6be651baa42a6d1161d..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -public class GrpcSaveNachrichtDraftRequestTestFactory { - - static GrpcSaveNachrichtDraftRequest create() { - return createBuilder().build(); - } - - static GrpcSaveNachrichtDraftRequest.Builder createBuilder() { - return GrpcSaveNachrichtDraftRequest.newBuilder() - .setVorgangId(MessageTestFactory.VORGANG_ID); - - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSendPostfachMailRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSendPostfachMailRequestTestFactory.java deleted file mode 100644 index 076daa2e6bc31781983f8eb7ae50471d02ab0903..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSendPostfachMailRequestTestFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import java.util.UUID; - -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; -import de.ozgcloud.vorgang.grpc.command.GrpcUser; - -class GrpcSendPostfachMailRequestTestFactory { - - public static final String COMMAND_ID = UUID.randomUUID().toString(); - public static final String USER_ID = UUID.randomUUID().toString(); - - public static GrpcSendPostfachMailRequest create() { - return createBuilder().build(); - } - - public static GrpcSendPostfachMailRequest.Builder createBuilder() { - return GrpcSendPostfachMailRequest.newBuilder() - .setContext(GrpcCallContext.newBuilder().setUser(GrpcUser.newBuilder().setId(USER_ID).build()).build()) - .setCommandId(COMMAND_ID) - .setMail(GrpcPostfachMailTestFactory.createBuilder().clearCreatedAt().clearDirection().build()); - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java deleted file mode 100644 index 94f5df83467203175a20f03facaa15f6e3ed33cd..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java +++ /dev/null @@ -1,24 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -public class PostfachAddressTestFactory { - - public final static int TYPE = 1; - public static final String STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE = MessageTestFactory.POSTFACH_ID; - public final static StringBasedIdentifier IDENTIFIER = StringBasedIdentifier.builder().postfachId(STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE) - .build(); - public static final String VERSION = "1.0"; - - public static PostfachAddress create() { - return createBuilder().build(); - } - - public static PostfachAddress.PostfachAddressBuilder createBuilder() { - return PostfachAddress.builder() - .type(TYPE) - .identifier(IDENTIFIER) - .version(VERSION) - .serviceKontoType(PostfachTestFactory.POSTFACH_TYPE); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java deleted file mode 100644 index 3964f981ad91a24b27d679420b55d43e0dbc8ed2..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -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.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.command.Command; -import de.ozgcloud.command.CommandCreatedEvent; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -class PostfachEventListenerTest { - - @InjectMocks - private PostfachEventListener listener; - - @Mock - private PostfachService service; - @Mock - private Command command; - - @Captor - private ArgumentCaptor<PostfachNachricht> nachrichtCaptor; - - @DisplayName("Send postfach nachricht") - @Nested - class TestSendPostfachNachricht { - - private static final String COMMAND_ID = UUID.randomUUID().toString(); - private static final String USER_ID = PostfachNachrichtTestFactory.CREATED_BY; - - @BeforeEach - void mockCommand() { - when(command.getId()).thenReturn(COMMAND_ID); - when(command.getCreatedBy()).thenReturn(USER_ID); - when(command.getVorgangId()).thenReturn(MessageTestFactory.VORGANG_ID); - when(command.getRelationId()).thenReturn(MessageTestFactory.VORGANG_ID); - when(command.getBodyObject()).thenReturn(buildCommandBody()); - } - - @Test - void shouldCallService() { - listener.sendPostfachNachricht(new CommandCreatedEvent(command)); - - verify(service).sendMail(eq(COMMAND_ID), eq(USER_ID), nachrichtCaptor.capture()); - assertThat(nachrichtCaptor.getValue()) - .usingRecursiveComparison().ignoringFields("id", "createdAt", "messageCode", "messageId", "sentAt", "sentSuccessful") - .isEqualTo(PostfachNachrichtTestFactory.createBuilder().direction(Direction.OUT).build()); - } - - @Test - void shouldNotHaveIdForNewNachricht() { - listener.sendPostfachNachricht(new CommandCreatedEvent(command)); - - verify(service).sendMail(eq(COMMAND_ID), eq(USER_ID), nachrichtCaptor.capture()); - assertThat(nachrichtCaptor.getValue().getId()).isNull(); - } - - @Test - void shouldHaveIdForSavedNachricht() { - when(command.getRelationId()).thenReturn(PostfachNachrichtTestFactory.ID); - - listener.sendPostfachNachricht(new CommandCreatedEvent(command)); - - verify(service).sendMail(eq(COMMAND_ID), eq(USER_ID), nachrichtCaptor.capture()); - assertThat(nachrichtCaptor.getValue().getId()).isEqualTo(PostfachNachrichtTestFactory.ID); - } - - @DisplayName("with postfachAddress") - @Nested - class TestWithPostfachAddress { - - @BeforeEach - void mockCommandBodyObject() { - var body = buildCommandBody(); - body.remove(PostfachNachricht.FIELD_POSTFACH_ID); - when(command.getBodyObject()).thenReturn(body); - } - - @Test - void shouldHandleEmptyPostfachId() { - var postfachMailToSend = sendPostfachNachricht(); - - assertThat(postfachMailToSend.getPostfachId()).isNull(); - } - } - - @DisplayName("with postfachId") - @Nested - class TestWithPostfachId { - - @BeforeEach - void mockCommandBodyObject() { - var body = buildCommandBody(); - body.remove(PostfachNachricht.POSTFACH_ADDRESS_FIELD); - when(command.getBodyObject()).thenReturn(body); - } - - @Test - void shouldHandleEmptyPostfachAddress() { - var postfachMailToSend = sendPostfachNachricht(); - - assertThat(postfachMailToSend.getPostfachAddress()).isNull(); - } - } - - private PostfachNachricht sendPostfachNachricht() { - listener.sendPostfachNachricht(new CommandCreatedEvent(command)); - - verify(service).sendMail(eq(COMMAND_ID), eq(USER_ID), nachrichtCaptor.capture()); - - return nachrichtCaptor.getValue(); - } - - private Map<String, Object> buildCommandBody() { - var map = new HashMap<String, Object>(); - map.putAll(Map.of( - PostfachNachricht.FIELD_VORGANG_ID, "fake", - PostfachNachricht.FIELD_POSTFACH_ID, MessageTestFactory.POSTFACH_ID, - PostfachNachricht.POSTFACH_ADDRESS_FIELD, // - Map.of(PostfachAddress.VERSION_FIELD, PostfachAddressTestFactory.VERSION, - PostfachAddress.TYPE_FIELD, PostfachAddressTestFactory.TYPE, - PostfachAddress.SERVICEKONTO_TYPE_FIELD, PostfachTestFactory.POSTFACH_TYPE, - PostfachAddress.IDENTIFIER_FIELD, // - Map.of(PostfachNachricht.FIELD_POSTFACH_ID, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE)), - PostfachNachricht.FIELD_SUBJECT, MessageTestFactory.SUBJECT, - PostfachNachricht.FIELD_MAIL_BODY, PostfachNachrichtTestFactory.MAIL_BODY, - PostfachNachricht.FIELD_REPLY_OPTION, PostfachNachrichtTestFactory.REPLY_OPTION.name(), - PostfachNachricht.FIELD_ATTACHMENTS, PostfachNachrichtTestFactory.ATTACHMENTS)); - return map; - } - } - - @DisplayName("Get string list value") - @Nested - class TestGetStringListValue { - - @Test - void shouldReturnMultipleValuesFieldAsStringList() { - var commandBodyMap = new HashMap<String, Object>(); - commandBodyMap.put(PostfachNachricht.FIELD_ATTACHMENTS, List.of("1", "2")); - - var list = listener.getStringListValue(commandBodyMap, PostfachNachricht.FIELD_ATTACHMENTS); - - assertThat(list).contains("1").contains("2"); - } - - @Test - void shouldReturnSingleValueFieldAsStringList() { - var commandBodyMap = new HashMap<String, Object>(); - commandBodyMap.put(PostfachNachricht.FIELD_ATTACHMENTS, List.of("1", "2")); - - var list = listener.getStringListValue(commandBodyMap, PostfachNachricht.FIELD_ATTACHMENTS); - - assertThat(list).contains("1").contains("2"); - } - - @Test - void shouldReturnEmptyFieldValueAsEmptyCollection() { - var commandBodyMap = new HashMap<String, Object>(); - commandBodyMap.put(PostfachNachricht.FIELD_ATTACHMENTS, Collections.emptyList()); - - var list = listener.getStringListValue(commandBodyMap, PostfachNachricht.FIELD_ATTACHMENTS); - - assertThat(list).isEmpty(); - } - - @Test - void shouldReturnEmptyFieldAsEmptyCollection() { - var commandBodyMap = new HashMap<String, Object>(); - - var list = listener.getStringListValue(commandBodyMap, PostfachNachricht.FIELD_ATTACHMENTS); - - assertThat(list).isEmpty(); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcServiceTest.java deleted file mode 100644 index dec8669386bfc6918fbffbe810845f183e53494b..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcServiceTest.java +++ /dev/null @@ -1,331 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; -import io.grpc.stub.StreamObserver; - -class PostfachGrpcServiceTest { - - @InjectMocks - private PostfachGrpcService service; - - @Mock - private PostfachService postfachService; - @Mock - private GrpcPostfachNachrichtMapper nachrichtMapper; - @Mock - private PostfachMapper postfachMapper; - - @Spy - private PostfachNachrichtMapper mapper = Mappers.getMapper(PostfachNachrichtMapper.class); - - @Nested - class TestSaveNachrichtDraft { - - @Mock - private StreamObserver<GrpcSaveNachrichtDraftResponse> responseObserver; - - @BeforeEach - void init() { - when(nachrichtMapper.mapFromGrpc(any())).thenReturn(PostfachNachrichtTestFactory.create()); - } - - @Test - void shouldCallService() { - var nachricht = PostfachNachrichtTestFactory.create(); - when(nachrichtMapper.mapFromGrpc(any())).thenReturn(nachricht); - - service.saveNachrichtDraft(GrpcSaveNachrichtDraftRequestTestFactory.create(), responseObserver); - - verify(postfachService).saveDraft(MessageTestFactory.VORGANG_ID, nachricht); - } - - @Test - void shouldSendResponse() { - service.saveNachrichtDraft(GrpcSaveNachrichtDraftRequestTestFactory.create(), responseObserver); - - verify(responseObserver).onNext(any()); - } - - @Test - void shouldCompleteCall() { - service.saveNachrichtDraft(GrpcSaveNachrichtDraftRequestTestFactory.create(), responseObserver); - - verify(responseObserver).onCompleted(); - } - - } - - @Nested - class TestSendMail { - - @Mock - private StreamObserver<GrpcSendPostfachMailResponse> responseObserver; - - @Captor - private ArgumentCaptor<PostfachNachricht> mailCaptor; - - @Test - void shouldCallPostfachServiceWithCommandId() { - service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(postfachService).sendMail(eq(GrpcSendPostfachMailRequestTestFactory.COMMAND_ID), anyString(), any()); - } - - @Test - void shouldCallServiceWithMail() { - service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(postfachService).sendMail(anyString(), anyString(), mailCaptor.capture()); - assertThat(mailCaptor.getValue()).usingRecursiveComparison() - .ignoringFields(PostfachNachricht.FIELD_MESSAGE_ID, PostfachNachricht.FIELD_CREATED_AT, PostfachNachricht.FIELD_CREATED_BY, - PostfachNachricht.FIELD_DIRECTION, PostfachNachricht.FIELD_SENT_SUCCESSFUL, PostfachNachricht.FIELD_SENT_AT, - PostfachNachricht.FIELD_MESSAGE_CODE, - PostfachNachricht.FIELD_ATTACHMENTS) // TODO remove this for sending attachments - .isEqualTo(PostfachNachrichtTestFactory.create()); - } - - @Test - void shouldCallServiceWithUserId() { - service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(postfachService).sendMail(anyString(), eq(GrpcSendPostfachMailRequestTestFactory.USER_ID), any()); - } - - @Test - void shouldSendResponse() { - service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(responseObserver).onNext(notNull()); - } - - @Test - void shouldCompleteCall() { - service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(responseObserver).onCompleted(); - } - } - - @Nested - class TestFindPostfachMail { - - private GrpcFindPostfachMailRequest request; - @Mock - private StreamObserver<GrpcFindPostfachMailResponse> responseObserver; - - @BeforeEach - void init() { - request = GrpcFindPostfachMailRequest.newBuilder().setNachrichtId(PostfachNachrichtTestFactory.ID).build(); - } - - @Test - void shouldCallService() { - service.findPostfachMail(request, responseObserver); - - verify(postfachService).findById(PostfachNachrichtTestFactory.ID); - } - - @Test - void shouldCallOnNext() { - service.findPostfachMail(request, responseObserver); - - verify(responseObserver).onNext(notNull()); - } - - @Test - void shouldCompleteCall() { - service.findPostfachMail(request, responseObserver); - - verify(responseObserver).onCompleted(); - } - } - - @Nested - class TestFindPostfachMails { - - private static final String VORGANG_ID = "42"; - private GrpcFindPostfachMailsRequest request; - - @Mock - private StreamObserver<GrpcFindPostfachMailsResponse> responseObserver; - - @BeforeEach - void init() { - request = GrpcFindPostfachMailsRequest.newBuilder().setVorgangId(VORGANG_ID).build(); - } - - @Test - void shouldCallService() { - service.findPostfachMails(request, responseObserver); - - verify(postfachService).findByVorgang(VORGANG_ID); - } - - @Test - void shouldCompleteCall() { - service.findPostfachMails(request, responseObserver); - - verify(responseObserver).onCompleted(); - } - - } - - @Nested - class TestResendMail { - - @Mock - private StreamObserver<GrpcResendPostfachMailResponse> responseObserver; - - @Test - void shouldCallPostfachService() { - service.resendPostfachMail(GrpcResendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(postfachService).resendMail(GrpcResendPostfachMailRequestTestFactory.COMMAND_ID, PostfachNachrichtTestFactory.ID); - } - - @Test - void shouldSendResponse() { - service.resendPostfachMail(GrpcResendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(responseObserver).onNext(notNull()); - } - - @Test - void shouldCompleteCall() { - service.resendPostfachMail(GrpcResendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(responseObserver).onCompleted(); - } - } - - @Nested - class TestIsPostfachConfigured { - - private final GrpcIsPostfachConfiguredRequest request = GrpcIsPostfachConfiguredRequest.newBuilder().build(); - - @Mock - private StreamObserver<GrpcIsPostfachConfiguredResponse> responseObserver; - - @Test - void shouldCallPostfachService() { - service.isPostfachConfigured(request, responseObserver); - - verify(postfachService).isPostfachConfigured(); - } - - @Test - void shouldSendResponse() { - service.isPostfachConfigured(request, responseObserver); - - verify(responseObserver).onNext(notNull()); - } - - @Test - void shouldCompleteCall() { - service.isPostfachConfigured(request, responseObserver); - - verify(responseObserver).onCompleted(); - } - } - - @Nested - class TestGetPostfachConfig { - private GrpcGetPostfachConfigRequest request = GrpcGetPostfachConfigRequest.newBuilder().build(); - - @Mock - private StreamObserver<GrpcGetPostfachConfigResponse> responseObserver; - - @Test - void shouldSendResponse() { - service.getPostfachConfig(request, responseObserver); - - verify(responseObserver).onNext(notNull()); - } - - @Test - void shouldCompleteCall() { - service.getPostfachConfig(request, responseObserver); - - verify(responseObserver).onCompleted(); - } - - @Nested - class TestBuildGetPostfachConfigResponse { - - @Test - void shouldReturnNotConfigured() { - var response = service.buildGetPostfachConfigResponse(); - - assertThat(response).isEqualTo(GrpcGetPostfachConfigResponse.newBuilder().setConfigured(false).build()); - } - - @Nested - class TestConfigured { - - @Mock - private Postfach postfach; - @Mock - private GrpcPostfach grpcPostfach; - - @BeforeEach - void setup() { - when(postfachService.getPostfachs()).thenReturn(Stream.of(postfach)); - when(postfachMapper.toGrpc(postfach)).thenReturn(grpcPostfach); - } - - @Test - void shouldReturnPostfachs() { - var response = service.buildGetPostfachConfigResponse(); - - assertThat(response.getConfigured()).isTrue(); - } - - @Test - void shouldSetPostfach() { - var response = service.buildGetPostfachConfigResponse(); - - assertThat(response.getPostfachList()).containsExactly(grpcPostfach); - } - } - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMapperTest.java deleted file mode 100644 index fb1d7eecd2a43dee1fddb15de49a71bb578b7e4a..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMapperTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -class PostfachMapperTest { - - private PostfachMapper mapper = Mappers.getMapper(PostfachMapper.class); - - @Test - void shouldMapType() { - var result = mapper.toGrpc(PostfachTestFactory.create()); - - assertThat(result.getType()).isEqualTo(PostfachTestFactory.POSTFACH_TYPE); - } - - @Test - void shouldMapReplyAllowed() { - var result = mapper.toGrpc(PostfachTestFactory.create()); - - assertThat(result.getReplyAllowed()).isTrue(); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java deleted file mode 100644 index e0ea9bac95098ccf47917dccb4661338824afe80..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Map; - -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.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import lombok.SneakyThrows; - -class PostfachNachrichtMapperTest { - - @InjectMocks - private PostfachNachrichtMapper mapper = Mappers.getMapper(PostfachNachrichtMapper.class); - @Mock - private GrpcObjectMapper grpcObjectMapper; - - @DisplayName("From map") - @Nested - class TestFromMap { - - @DisplayName("with existing postfachAddress") - @Nested - class TestWithExistingPostfachAddress { - - @BeforeEach - void mockGrpcObjectMapper() { - when(grpcObjectMapper.fromMap(any())).thenReturn(GrpcPostfachAddressTestFactory.createIdentifier()); - } - - @Test - void shouldFillGrpcMail() { - var grpcMail = fromMap(PostfachNachrichtTestFactory.asMap()); - - assertThat(grpcMail).usingRecursiveComparison().isEqualTo(GrpcPostfachMailTestFactory.create()); - } - - @Test - void shouldCallGrpcObjectMapper() { - fromMap(getMapWithoutProperty(PostfachNachricht.FIELD_SENT_SUCCESSFUL)); - - verify(grpcObjectMapper).fromMap(any()); - } - - @Test - void shouldIgnoreSentSuccessful() { - var grpcMail = fromMap(getMapWithoutProperty(PostfachNachricht.FIELD_SENT_SUCCESSFUL)); - - assertThat(grpcMail.getSentSuccessful()).isFalse(); - } - - @Test - void shouldIgnoreSentAt() { - var grpcMail = fromMap(getMapWithoutProperty(PostfachNachricht.FIELD_SENT_AT)); - - assertThat(grpcMail.getSentAt()).isEmpty(); - } - - @ParameterizedTest - @ValueSource(strings = PostfachNachricht.FIELD_POSTFACH_ID) - void shouldMapDefaultOnNonExistingValues(String fieldName) { - var mapped = fromMap(getMapWithoutProperty(fieldName)); - - var fieldValue = getAttributeFromGrpcObject(mapped, fieldName); - assertThat((String) fieldValue).isEmpty(); - } - } - - @DisplayName("with missing postfachAddress") - @Nested - class TestWithMissinPostfachAddress { - - @Test - void shouldNotThrowException() { - assertDoesNotThrow(() -> fromMap(getMapWithoutProperty(PostfachNachricht.POSTFACH_ADDRESS_FIELD))); - } - } - - private GrpcPostfachMail fromMap(Map<String, Object> map) { - return mapper.fromMap(map); - } - } - - @DisplayName("From map to postfachMail") - @Nested - class TestFromMapToPostfachMail { - - @Test - void shouldMap() { - var mail = fromMapToPostfachMail(PostfachNachrichtTestFactory.asMap()); - - assertThat(mail).usingRecursiveComparison().isEqualTo(PostfachNachrichtTestFactory.create()); - } - - @DisplayName("with missing postfachAddress") - @Nested - class TestWithMissinPostfachAddress { - - @Test - void shouldMapAsNull() { - var mail = fromMapToPostfachMail(getMapWithoutProperty(PostfachNachricht.POSTFACH_ADDRESS_FIELD)); - - assertThat(mail.getPostfachAddress()).isNull(); - } - - @Test - void shouldNotThrowExceptionOnMissingPostfachAddress() { - assertDoesNotThrow(() -> fromMapToPostfachMail(getMapWithoutProperty(PostfachNachricht.POSTFACH_ADDRESS_FIELD))); - } - } - - @ParameterizedTest - @ValueSource(strings = PostfachNachricht.FIELD_POSTFACH_ID) - void shouldMapDefaultOnNonExistingValues(String fieldName) { - var mapped = fromMapToPostfachMail(getMapWithoutProperty(fieldName)); - - var fieldValue = getAttributeFromObject(mapped, fieldName); - assertThat((String) fieldValue).isEmpty(); - } - - private PostfachNachricht fromMapToPostfachMail(Map<String, Object> map) { - return mapper.fromMapToPostfachMail(map); - } - } - - @DisplayName("From grpc mail") - @Nested - class TestFromGrpcMail { - - @Test - void shouldMapFields() { - var mapped = fromGrpcMail(GrpcPostfachMailTestFactory.create()); - - assertThat(mapped).usingRecursiveComparison() - .ignoringFields("createdAt", "createdBy", "direction", "messageId", "sentAt", "sentSuccessful", "memoizedHashCode") - .isEqualTo(PostfachNachrichtTestFactory.create()); - } - - @Test - void shouldHandleEmptyPostfachId() { - var postfachMailWithoutPostfachId = GrpcPostfachMailTestFactory.createBuilder().clearPostfachId().build(); - - assertDoesNotThrow(() -> fromGrpcMail(postfachMailWithoutPostfachId)); - } - - private PostfachNachricht fromGrpcMail(GrpcPostfachMail postfachMail) { - return mapper.fromGrpcMail(postfachMail); - } - } - - private Map<String, Object> getMapWithoutProperty(String entryKey) { - var map = PostfachNachrichtTestFactory.asMap(); - map.remove(entryKey); - return map; - } - - private Object getAttributeFromGrpcObject(Object obj, String name) { - return getAttributeFrom(obj, name + "_"); - } - - @SneakyThrows - private Object getAttributeFromObject(Object obj, String name) { - return getAttributeFrom(obj, name); - } - - @SneakyThrows - private Object getAttributeFrom(Object obj, String name) { - var clazz = obj.getClass(); - var field = clazz.getDeclaredField(name); - field.setAccessible(true); - - return field.get(obj); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java deleted file mode 100644 index 23276159b678b7b0501794021e79c7fbe2241283..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import static de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption.*; -import static de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory.*; - -import java.time.ZonedDateTime; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; - -public class PostfachNachrichtTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final String CREATED_AT_STR = "2020-04-01T10:30:10Z"; - public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); - public static final String CREATED_BY = UUID.randomUUID().toString(); - public static final String MAIL_BODY = "Body\nString"; - - public static final String SENT_AT_STR = "2020-04-01T11:30:10Z"; - public static final ZonedDateTime SENT_AT = ZonedDateTime.parse(SENT_AT_STR); - public static final boolean SENT_SUCCESSFUL = true; - public static final String MESSAGE_CODE = PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE.getMessageCode(); - public static final PostfachNachricht.ReplyOption REPLY_OPTION = MANDATORY; - - public static final PostfachNachricht.Direction DIRECTION = Direction.IN; - - public static final String ATTACHMENT_FILE_ID = "21"; - public static final List<String> ATTACHMENTS = List.of(ATTACHMENT_FILE_ID); - - public static PostfachNachricht create() { - return createBuilder().build(); - } - - public static PostfachNachricht.PostfachNachrichtBuilder createBuilder() { - return PostfachNachricht.builder() - .id(ID) - .postfachId(POSTFACH_ID) - .postfachAddress(PostfachAddressTestFactory.create()) - .messageId(MESSAGE_ID) - .vorgangId(VORGANG_ID) - .direction(DIRECTION) - .createdAt(CREATED_AT) - .createdBy(CREATED_BY) - .sentAt(SENT_AT) - .sentSuccessful(SENT_SUCCESSFUL) - .messageCode(MESSAGE_CODE) - .replyOption(REPLY_OPTION) - .subject(SUBJECT) - .mailBody(MAIL_BODY) - .attachments(ATTACHMENTS); - } - - public static Map<String, Object> asMap() { - var map = new HashMap<String, Object>(); - map.put(PostfachNachricht.FIELD_ID, ID); - map.put(PostfachNachricht.FIELD_POSTFACH_ID, POSTFACH_ID); - map.put(PostfachNachricht.POSTFACH_ADDRESS_FIELD, getPostfachAddressAsMap()); - map.put(PostfachNachricht.FIELD_MESSAGE_ID, MESSAGE_ID); - map.put(PostfachNachricht.FIELD_VORGANG_ID, VORGANG_ID); - map.put(PostfachNachricht.FIELD_DIRECTION, DIRECTION.name()); - map.put(PostfachNachricht.FIELD_CREATED_AT, CREATED_AT_STR); - map.put(PostfachNachricht.FIELD_CREATED_BY, CREATED_BY); - map.put(PostfachNachricht.FIELD_SENT_AT, SENT_AT_STR); - map.put(PostfachNachricht.FIELD_SENT_SUCCESSFUL, SENT_SUCCESSFUL); - map.put(PostfachNachricht.FIELD_MESSAGE_CODE, MESSAGE_CODE); - map.put(PostfachNachricht.FIELD_REPLY_OPTION, REPLY_OPTION.name()); - map.put(PostfachNachricht.FIELD_SUBJECT, SUBJECT); - map.put(PostfachNachricht.FIELD_MAIL_BODY, MAIL_BODY); - map.put(PostfachNachricht.FIELD_ATTACHMENTS, ATTACHMENTS); - return map; - } - - private static Map<String, Object> getPostfachAddressAsMap() { - return Map.of(PostfachAddress.TYPE_FIELD, PostfachAddressTestFactory.TYPE, - PostfachAddress.VERSION_FIELD, PostfachAddressTestFactory.VERSION, - PostfachAddress.IDENTIFIER_FIELD, getPostfachAddressIdentifierAsMap(), - PostfachAddress.SERVICEKONTO_TYPE_FIELD, PostfachTestFactory.POSTFACH_TYPE); - } - - private static Map<String, Object> getPostfachAddressIdentifierAsMap() { - return Map.of(PostfachNachricht.FIELD_POSTFACH_ID, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachSchedulerTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachSchedulerTest.java deleted file mode 100644 index af624e27e141f71b36fe0458f58cb19ee58cdd33..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachSchedulerTest.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -public class PostfachSchedulerTest { - - @InjectMocks // NOSONAR - private PostfachScheduler scheduler; - @Mock - private PostfachService service; - - @Nested - class TestRunGetMessagesTask { - - @Test - void shouldCallService() { - scheduler.runGetMessagesTask(); - - verify(service).fetchAndPersistReplies(); - } - - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java deleted file mode 100644 index 495a14faa0c0a0889dae79daf0d11a6703860748..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java +++ /dev/null @@ -1,815 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; -import java.time.temporal.ChronoUnit; -import java.util.Optional; -import java.util.UUID; -import java.util.stream.Stream; - -import org.apache.logging.log4j.Logger; -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.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.mapstruct.factory.Mappers; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.boot.logging.LogLevel; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.nachrichten.antragraum.AntragraumService; -import de.ozgcloud.nachrichten.attributes.ClientAttributeService; -import de.ozgcloud.nachrichten.info.InfoManagerService; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption; -import de.ozgcloud.nachrichten.postfach.osi.MessageAttachmentService; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.OsiPostfachServerProcessException; -import de.ozgcloud.nachrichten.postfach.osi.OsiPostfachServerProcessExceptionTestFactory; -import de.ozgcloud.vorgang.callcontext.CallContextUserTestFactory; -import de.ozgcloud.vorgang.callcontext.CurrentUserService; -import nl.altindag.log.LogCaptor; - -class PostfachServiceTest { - - @Spy - @InjectMocks - private PostfachService service; - @Mock - private PostfachRemoteService postfachRemoteService; - - @Mock - private PersistPostfachNachrichtService persistingService; - @Spy - private PostfachNachrichtMapper mapper = Mappers.getMapper(PostfachNachrichtMapper.class); - - @Mock - private ClientAttributeService clientAttributeService; - @Mock - private MessageAttachmentService messageAttachmentService; - @Mock - private ApplicationEventPublisher publisher; - - @Mock - private CurrentUserService userService; - @Spy - private Optional<AntragraumService> antragsraumService = Optional.of(mock(AntragraumService.class)); - @Spy - private Optional<InfoManagerService> infomanagerService = Optional.of(mock(InfoManagerService.class)); - - static final String COMMAND_ID = UUID.randomUUID().toString(); - static final String USER_ID = UUID.randomUUID().toString(); - - @Nested - class TestSaveDraft { - - @Captor - private ArgumentCaptor<Optional<String>> userIdCaptor; - @Captor - private ArgumentCaptor<PostfachNachricht> nachrichtCaptor; - - @BeforeEach - void init() { - doNothing().when(service).persistMail(any(), any()); - - when(userService.getUser()).thenReturn(CallContextUserTestFactory.create()); - } - - @Test - void shouldUseUserIdFromContext() { - service.saveDraft(MessageTestFactory.VORGANG_ID, PostfachNachrichtTestFactory.create()); - - verify(service).persistMail(userIdCaptor.capture(), any()); - assertThat(userIdCaptor.getValue()).contains(CallContextUserTestFactory.ID); - } - - @Test - void shouldPersistNachricht() { - service.saveDraft(MessageTestFactory.VORGANG_ID, PostfachNachrichtTestFactory.create()); - - verify(service).persistMail(any(), any()); - } - - @Test - void shouldAddVorgangId() { - service.saveDraft(MessageTestFactory.VORGANG_ID, PostfachNachrichtTestFactory.createBuilder().vorgangId(null).build()); - - verify(service).persistMail(any(), nachrichtCaptor.capture()); - assertThat(nachrichtCaptor.getValue().getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); - } - } - - @Nested - class TestSendMail { - - @Test - void shouldCallDoSendMail() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - var mail = PostfachNachrichtTestFactory.create(); - - service.sendMail(COMMAND_ID, USER_ID, mail); - - verify(service).doSendMail(mail); - } - - @Test - void shouldCallPersistSentMail() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - var mail = PostfachNachrichtTestFactory.create(); - doReturn(mail).when(service).addMailSentInformation(any(PostfachNachricht.class), any(SendPostfachNachrichtResponse.class)); - - service.sendMail(COMMAND_ID, USER_ID, PostfachNachrichtTestFactory.create()); - - verify(service).persistSentMail(USER_ID, mail); - } - - @Test - void shouldAddMailSentInformation() { - var postfachMail = service.addMailSentInformation(PostfachNachrichtTestFactory.createBuilder().sentAt(null).sentSuccessful(null).build(), - SendPostfachNachrichtResponseTestFactory.create()); - - assertThat(postfachMail.getSentAt()).isNotNull(); - assertThat(postfachMail.getSentSuccessful()).isEqualTo(SendPostfachNachrichtResponseTestFactory.SENT_SUCCESSFUL); - assertThat(postfachMail.getMessageCode()).isEqualTo(SendPostfachNachrichtResponseTestFactory.MESSAGE_CODE.getMessageCode()); - } - - @Test - void shouldHandleSendMail() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - var mail = PostfachNachrichtTestFactory.create(); - service.sendMail(COMMAND_ID, USER_ID, mail); - - verify(service).handleSendMail(COMMAND_ID, mail); - } - - @Nested - class TestPersistSentMail { - - @Captor - private ArgumentCaptor<PostfachNachricht> mailCaptor; - - @Test - void shouldCallPersistingService() { - var mail = PostfachNachrichtTestFactory.create(); - - service.persistSentMail(USER_ID, mail); - - verify(persistingService).persistNachricht(any(), notNull()); - } - - @Test - void shouldSetDirectionToIN() { - service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.createBuilder().direction(null).build()); - - verify(persistingService).persistNachricht(any(), mailCaptor.capture()); - assertThat(mailCaptor.getValue().getDirection()).isEqualTo(Direction.OUT); - } - - @Test - void shouldSetCreatedAt() { - service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.createBuilder().createdAt(null).build()); - - verify(persistingService).persistNachricht(any(), mailCaptor.capture()); - assertThat(mailCaptor.getValue().getCreatedAt()).isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS)); - } - - @Test - void shouldSetCreatedBy() { - service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.createBuilder().createdBy(null).build()); - - verify(persistingService).persistNachricht(any(), mailCaptor.capture()); - assertThat(mailCaptor.getValue().getCreatedBy()).isEqualTo(USER_ID); - } - - @Test - void shouldSetUserId() { - var mail = PostfachNachrichtTestFactory.create(); - - service.persistSentMail(USER_ID, mail); - - verify(persistingService).persistNachricht(eq(Optional.of(USER_ID)), any()); - } - - @Test - void shouldSetClientAttribute() { - service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.create()); - - verify(clientAttributeService).setHasPostfachNachricht(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldNOTSetNewNachricht() { - service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.create()); - - verify(clientAttributeService, never()).setHasNewPostfachNachricht(any()); - } - } - - @Nested - class TestProcessForAntragsraum { - - @Mock - private PostfachNachricht modifiedMail; - - @Test - void shouldReturnEmpty() { - doReturn(false).when(service).isPostfachWithAntragsraum(any()); - - var result = service.processForAntragsraum(PostfachNachrichtTestFactory.create()); - - assertThat(result).isEmpty(); - } - - @Test - void shouldCallNotifyAntragsraum() { - doReturn(true).when(service).isPostfachWithAntragsraum(any()); - var mail = PostfachNachrichtTestFactory.create(); - - service.processForAntragsraum(mail); - - verify(infomanagerService.get()).notifyInfoManager(mail); - } - - @Test - void shouldReturnAdjustedMail() { - doReturn(true).when(service).isPostfachWithAntragsraum(any()); - doReturn(Optional.of(modifiedMail)).when(service).adjustMail(any()); - - var result = service.processForAntragsraum(PostfachNachrichtTestFactory.create()); - - assertThat(result).contains(modifiedMail); - } - - @DisplayName("Is notify antragsraum") - @Nested - class TestIsNotifyAntragsraum { - - @DisplayName("should return true if") - @ParameterizedTest(name = "replyOption is {0}") - @EnumSource(value = ReplyOption.class, names = { "FORBIDDEN" }, mode = EnumSource.Mode.EXCLUDE) - void shouldConfirm(ReplyOption replyOption) { - doReturn(true).when(service).isPostfachWithAntragsraum(any()); - - var result = service.isNotifyAntragsraum(replyOption); - - assertThat(result).isTrue(); - } - - @DisplayName("should return false if reply is forbidden") - @Test - void shouldDeclineIfForbidden() { - var result = service.isNotifyAntragsraum(ReplyOption.FORBIDDEN); - - assertThat(result).isFalse(); - } - - @DisplayName("should return false if antragsraum is not configured") - @Test - void shouldDeclineIfNotConfigured() { - doReturn(false).when(service).isPostfachWithAntragsraum(any()); - - var result = service.isNotifyAntragsraum(ReplyOption.POSSIBLE); - - assertThat(result).isFalse(); - } - } - - @Nested - class TestAdjustMail { - - @Mock - private PostfachNachricht mail; - - @Nested - class TestReplaceBody { - - @Test - void shouldReturnEmptyIfNoAntragsraum() { - ReflectionTestUtils.setField(service, "antragraumService", Optional.empty()); - - var result = adjustMail(); - - assertThat(result).isEmpty(); - } - - @Test - void shouldAdjustMailBody() { - when(mail.toBuilder()).thenReturn(PostfachNachrichtTestFactory.createBuilder()); - var expectedMailBody = "Antragsraum Text"; - when(antragsraumService.get().getUserNotificationText()).thenReturn(expectedMailBody); - - var result = adjustMail(); - - assertThat(result).isPresent().get().extracting(PostfachNachricht::getMailBody).isEqualTo(expectedMailBody); - } - } - - private Optional<PostfachNachricht> adjustMail() { - return service.adjustMail(mail); - } - } - - } - } - - @Nested - class TestFindById { - @Test - void shouldCallPersistingService() { - service.findById(PostfachNachrichtTestFactory.ID); - - verify(persistingService).findById(PostfachNachrichtTestFactory.ID); - } - } - - @Nested - class TestFindByVorgang { - - private static final String VORGANG_ID = UUID.randomUUID().toString(); - - @Test - void shouldCallPersistingService() { - service.findByVorgang(VORGANG_ID); - - verify(persistingService).findByVorgangAsMap(VORGANG_ID); - } - } - - @Nested - class TestFetchAndPersistReplies { - - private static final PostfachNachricht nachricht = PostfachNachrichtTestFactory.create(); - - @BeforeEach - void initTest() { - lenient().when(postfachRemoteService.getAllMessages()).thenReturn(Stream.of(nachricht)); - } - - @Test - void shouldCallGetAllMessages() { - service.fetchAndPersistReplies(); - - verify(postfachRemoteService).getAllMessages(); - } - - @Test - void shouldCallPersistingService() { - service.fetchAndPersistReplies(); - - verify(persistingService).persistNachricht(eq(Optional.empty()), any()); - } - - @Test - void shouldCallDelete() { - service.fetchAndPersistReplies(); - - verify(postfachRemoteService).deleteMessage(MessageTestFactory.MESSAGE_ID); - } - - @Test - void shouldSetNewPostfachNachricht() { - service.fetchAndPersistReplies(); - - verify(clientAttributeService).setHasNewPostfachNachricht(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldCallClientAttributeService() { - service.fetchAndPersistReplies(); - - verify(clientAttributeService).setHasNewPostfachNachricht(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldThrowNotConfiguredException() { - doReturn(false).when(service).isPostfachConfigured(); - - assertThatExceptionOfType(NotConfiguredException.class).isThrownBy(() -> service.fetchAndPersistReplies()); - verify(postfachRemoteService, never()).getAllMessages(); - } - } - - @Nested - class TestPeristMail { - @Test - void shouldPersistMail() { - PostfachNachricht mail = PostfachNachrichtTestFactory.create(); - - service.persistMail(Optional.of(USER_ID), mail); - - verify(persistingService).persistNachricht(eq(Optional.of(USER_ID)), same(mail)); - } - - @Test - void shouldSetHasPostfachNachricht() { - var mail = PostfachNachrichtTestFactory.create(); - - service.persistMail(Optional.of(USER_ID), mail); - - verify(clientAttributeService).setHasPostfachNachricht(MessageTestFactory.VORGANG_ID); - } - - @Test - @DisplayName("should NOT set hasPostfachNachricht if Nachricht is sent from system") - void shouldNOTSetHasNachrichtForSystemNachricht() { - var mail = PostfachNachrichtTestFactory.createBuilder().createdBy("system-123").build(); - - service.persistMail(Optional.of(USER_ID), mail); - - verify(clientAttributeService, never()).setHasPostfachNachricht(MessageTestFactory.VORGANG_ID); - } - } - - @Nested - class TestResendPostfachMail { - - static final String COMMAND_ID = UUID.randomUUID().toString(); - static final PostfachNachricht mail = PostfachNachrichtTestFactory.create(); - - @BeforeEach - void mockService() { - when(persistingService.getById(anyString())).thenReturn(PostfachNachrichtTestFactory.asMap()); - doReturn(mail).when(mapper).fromMapToPostfachMail(anyMap()); - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - } - - @Test - void shouldCallPersistingServiceGetById() { - service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID); - - verify(persistingService).getById(PostfachNachrichtTestFactory.ID); - } - - @Test - void shouldMapFromMapToPostfachMail() { - service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID); - - verify(mapper).fromMapToPostfachMail(PostfachNachrichtTestFactory.asMap()); - } - - @Test - void shouldSendMail() { - service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID); - - verify(postfachRemoteService).sendMessage(any(PostfachNachricht.class)); - } - - @Test - void shouldPatchMail() { - service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID); - - verify(persistingService).patch(anyString(), anyMap()); - } - - @Test - void shouldHandleSentMail() { - service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID); - - verify(service).handleSendMail(COMMAND_ID, mail); - } - } - - @Nested - class TestCreateResendPatchMap { - - @Test - void shouldContainsSentAt() { - var map = service.createResendPatchMap(SendPostfachNachrichtResponseTestFactory.create()); - - assertThat(map).containsKey(PostfachNachricht.FIELD_SENT_AT); - assertThat(ZonedDateTime.parse(map.get(PostfachNachricht.FIELD_SENT_AT).toString())).isCloseTo(ZonedDateTime.now(), - within(2, ChronoUnit.SECONDS)); - } - - @Test - void shouldContainsSentSuccessful() { - var map = service.createResendPatchMap(SendPostfachNachrichtResponseTestFactory.create()); - - assertThat(map).containsEntry(PostfachNachricht.FIELD_SENT_SUCCESSFUL, true); - } - - @Test - void shouldContainsMessageCode() { - var map = service.createResendPatchMap(SendPostfachNachrichtResponseTestFactory.create()); - - assertThat(map).containsEntry(PostfachNachricht.FIELD_MESSAGE_CODE, - SendPostfachNachrichtResponseTestFactory.MESSAGE_CODE.getMessageCode()); - } - } - - @DisplayName("Handle send mail") - @Nested - class TestHandleSendMail { - - final String COMMAND_ID = UUID.randomUUID().toString(); - final PostfachNachricht mail = PostfachNachrichtTestFactory.create(); - - @Test - void shouldDoSendMail() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - - service.handleSendMail(COMMAND_ID, mail); - - verify(service).doSendMail(mail); - } - - @Nested - class TestSentSuccess { - - @Captor - private ArgumentCaptor<PostfachMailSentEvent> eventCaptor; - - @Mock - private PostfachNachricht modifiedMail; - - @Test - void shouldDoSendMail() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - - service.handleSendMail(COMMAND_ID, mail); - - verify(service).doSendMail(mail); - } - - @Test - void shouldPublishEvent() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - - service.handleSendMail(COMMAND_ID, mail); - - verify(publisher).publishEvent(eventCaptor.capture()); - assertThat(eventCaptor.getValue().getSource()).isEqualTo(COMMAND_ID); - } - - @Test - void shouldReturnResponse() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - - var response = service.handleSendMail(COMMAND_ID, mail); - - assertThat(response.isSentSuccessful()).isTrue(); - assertThat(response.getMessageCode()).isEqualTo(PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE); - } - - @Test - void shouldSendProcessedPostfachNachricht() { - doReturn(Optional.of(modifiedMail)).when(service).processForAntragsraum(any()); - - service.handleSendMail(COMMAND_ID, mail); - - verify(service).doSendMail(modifiedMail); - } - - } - - @DisplayName("receive") - @Nested - class TestSentFailed { - - @Captor - private ArgumentCaptor<PostfachMailSentFailedEvent> eventFailedCaptor; - - @DisplayName("OsiPostfachException") - @Nested - class TestOnOsiPostfachException { - - private final static String MESSAGE = "Osi Postfach throws an exception."; - - @BeforeEach - void mockService() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - doThrow(new PostfachException(MESSAGE, PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE)).when(postfachRemoteService) - .sendMessage(any()); - } - - @Test - void shouldPublishEvent() { - service.handleSendMail(COMMAND_ID, mail); - - verify(publisher).publishEvent(eventFailedCaptor.capture()); - assertThat(eventFailedCaptor.getValue().getSource()).isEqualTo(COMMAND_ID); - assertThat(eventFailedCaptor.getValue().getErrorMessage()).startsWith(MESSAGE); - } - - @Test - void shouldLogError() { - var logCaptor = LogCaptor.forClass(PostfachService.class); - - service.handleSendMail(COMMAND_ID, mail); - - verify(service).proceedWithErrorException(eq(COMMAND_ID), any(PostfachException.class)); - assertThat(logCaptor.getLogEvents().get(0).getLevel()).isEqualTo(LogLevel.ERROR.name()); - assertThat(logCaptor.getLogEvents().get(0).getMessage()).startsWith(MESSAGE); - } - - @Test - void shouldReturnResponse() { - var response = service.handleSendMail(COMMAND_ID, mail); - - assertThat(response.isSentSuccessful()).isFalse(); - assertThat(response.getMessageCode()).isEqualTo(PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE); - } - } - - @DisplayName("OsiPostfachServerProcessException") - @Nested - class TestOsiPostfachServerProcessException { - - private final static String MESSAGE = "Postfach server returned false"; - - @Mock - private Logger logger; - - @BeforeEach - void mockService() { - doThrow(OsiPostfachServerProcessExceptionTestFactory.create()).when(postfachRemoteService).sendMessage(any()); - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - } - - @Test - void shouldPublishEvent() { - service.handleSendMail(COMMAND_ID, mail); - - verify(publisher).publishEvent(eventFailedCaptor.capture()); - assertThat(eventFailedCaptor.getValue().getSource()).isEqualTo(COMMAND_ID); - assertThat(eventFailedCaptor.getValue().getErrorMessage()).startsWith(MESSAGE); - } - - @Test - void shouldLogWarning() { - var logCaptor = LogCaptor.forClass(PostfachService.class); - - service.handleSendMail(COMMAND_ID, mail); - - verify(service).proceedwithWarnException(eq(COMMAND_ID), any(OsiPostfachServerProcessException.class)); - assertThat(logCaptor.getLogEvents().get(0).getLevel()).isEqualTo(LogLevel.WARN.name()); - assertThat(logCaptor.getLogEvents().get(0).getMessage()).startsWith(MESSAGE); - } - - @Test - void shouldReturnResponse() { - var response = service.handleSendMail(COMMAND_ID, mail); - - assertThat(response.isSentSuccessful()).isFalse(); - assertThat(response.getMessageCode()).isEqualTo(PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE); - } - } - } - - } - - @Nested - class TestDoSendMail { - @Test - void shouldCallPostfachRemoteService() { - service.doSendMail(PostfachNachrichtTestFactory.create()); - - verify(postfachRemoteService).sendMessage(any()); - } - - @Nested - class WithoutRemoteService { - @InjectMocks - private PostfachService service; - - @Test - void shouldThrowNotConfiguredException() { - var nachricht = PostfachNachrichtTestFactory.create(); - - assertThatExceptionOfType(NotConfiguredException.class).isThrownBy(() -> service.doSendMail(nachricht)); - - verify(postfachRemoteService, never()).sendMessage(any()); - } - } - - } - - @Nested - class TestIsPostfachConfigured { - - @Test - void shouldReturnTrue() { - assertThat(service.isPostfachConfigured()).isTrue(); - } - } - - @Nested - class TestGetPostfachs { - - private Postfach postfach = PostfachTestFactory.create(); - - @Test - void shouldCallBuildPostfach() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - - service.getPostfachs(); - - verify(service).buildPostfach(postfachRemoteService); - } - - @Test - void shouldReturnPostfachs() { - doReturn(postfach).when(service).buildPostfach(any()); - - var result = service.getPostfachs(); - - assertThat(result).containsOnly(postfach); - } - - @Test - void shouldReturnEmptyStream() { - doReturn(false).when(service).isPostfachConfigured(); - - var result = service.getPostfachs(); - - assertThat(result).isEmpty(); - } - - @Nested - class TestBuildPostfach { - - @Test - void shouldSetPostfachType() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - - var result = service.buildPostfach(postfachRemoteService); - - assertThat(result.getType()).isEqualTo(PostfachTestFactory.POSTFACH_TYPE); - } - - @Test - void shouldSetIsReplyAllowed() { - doReturn(true).when(service).isReplyAllowed(any()); - - var result = service.buildPostfach(postfachRemoteService); - - assertThat(result.isReplyAllowed()).isTrue(); - } - } - - @Nested - class TestIsReplyAllowed { - - @Test - void shouldAllowWithAntragsraum() { - doReturn(true).when(service).isPostfachWithAntragsraum(postfachRemoteService); - - var result = service.isReplyAllowed(postfachRemoteService); - - assertThat(result).isTrue(); - } - - @Test - void shouldAllowWithPostfach() { - doReturn(false).when(service).isPostfachWithAntragsraum(postfachRemoteService); - when(postfachRemoteService.isReplyAllowed()).thenReturn(true); - - var result = service.isReplyAllowed(postfachRemoteService); - - assertThat(result).isTrue(); - } - - @Test - void shouldNotAllow() { - doReturn(false).when(service).isPostfachWithAntragsraum(postfachRemoteService); - - var result = service.isReplyAllowed(postfachRemoteService); - - assertThat(result).isFalse(); - } - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachTestFactory.java deleted file mode 100644 index 866a3700b3cb28852d31830b6e2b2b34860572bb..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachTestFactory.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import de.ozgcloud.nachrichten.postfach.Postfach.PostfachBuilder; - -public class PostfachTestFactory { - - public static final String POSTFACH_TYPE = "postfachType"; - - public static final boolean REPLY_ALLOWED = true; - - public static Postfach create() { - return createBuilder().build(); - } - - public static PostfachBuilder createBuilder() { - return Postfach.builder() - .type(POSTFACH_TYPE) - .isReplyAllowed(REPLY_ALLOWED); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponseTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponseTestFactory.java deleted file mode 100644 index 4db1275867bb7556e6fc8659f270ad7a7204dc70..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponseTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -public class SendPostfachNachrichtResponseTestFactory { - - public static final boolean SENT_SUCCESSFUL = true; - public static final PostfachMessageCode MESSAGE_CODE = PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE; - - public static SendPostfachNachrichtResponse create() { - return createBuilder().build(); - } - - public static SendPostfachNachrichtResponse.SendPostfachNachrichtResponseBuilder createBuilder() { - return SendPostfachNachrichtResponse.builder() - .sentSuccessful(SENT_SUCCESSFUL) - .messageCode(MESSAGE_CODE); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTestFactory.java deleted file mode 100644 index 7be527b0372b1755f0de47c3c523725f34693dd0..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTestFactory.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.ozgcloud.nachrichten.postfach.bayernid.Absender.AbsenderBuilder; - -public class AbsenderTestFactory { - public static final String POSTKORB_ID="28721c6f-b78f-4d5c-a048-19fd2fc429d2"; - public static final String NAME="test name"; - public static final String ANSCHRIFT="Niemalsgasse 5, 99999 Irgendwo Stadt"; - public static final String DIENST="Stadtverwaltung"; - public static final String MANDANT="Fürth"; - public static final String GEMEINDE_SCHLUESSEL="09563000"; - - public static Absender create(){ - return createBuilder().build(); - } - - public static AbsenderBuilder createBuilder(){ - return Absender.builder() - .postkorbId(POSTKORB_ID) - .name(NAME) - .anschrift(ANSCHRIFT) - .dienst(DIENST) - .mandant(MANDANT) - .gemeindeSchluessel(GEMEINDE_SCHLUESSEL); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTypeTestFactory.java deleted file mode 100644 index f404f056bddd3c4b77210dd02ab7e086631783dd..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTypeTestFactory.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.akdb.egov.bsp.nachrichten.AbsenderType; -import lombok.val; - -public class AbsenderTypeTestFactory { - public static final String DIENST = "Stadtverwaltung"; - public static final String MANDANT = "Fürth"; - - public static AbsenderType create() { - val absenderType = new AbsenderType(); - absenderType.setDienst(DIENST); - absenderType.setMandant(MANDANT); - return absenderType; - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java deleted file mode 100644 index 5db43d5340835019620df44b1c52465a50dd793d..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.bayernid; - -import static de.ozgcloud.nachrichten.postfach.bayernid.BayernIdAttachmentTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; - -import org.bson.Document; -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.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import com.mongodb.client.gridfs.model.GridFSFile; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.BinaryFileService; -import de.ozgcloud.nachrichten.postfach.FileId; - -class BayernIdAttachmentServiceTest { - - private static final FileId FILE_ID = FileId.from("42"); - - @InjectMocks - @Spy - private BayernIdAttachmentService bayernIdAttachmentService; - - @Mock - private BinaryFileService fileService; - - @Mock - private GridFSFile gridFsfile; - - @Mock - private Document metadata; - - @Nested - class TestLoadingAttachment { - - @BeforeEach - void init() { - when(gridFsfile.getMetadata()).thenReturn(metadata); - when(fileService.getFile(any())).thenReturn(gridFsfile); - } - - @Test - void shouldCallGetFile() { - when(fileService.getUploadedFileStream(any())).thenReturn(new ByteArrayInputStream(CONTENT)); - - bayernIdAttachmentService.getMessageAttachment(FILE_ID); - - verify(fileService).getFile(FILE_ID); - } - - @Test - void shouldCallGetAttachmentContent() { - when(fileService.getUploadedFileStream(any())).thenReturn(new ByteArrayInputStream(CONTENT)); - - bayernIdAttachmentService.getMessageAttachment(FILE_ID); - - verify(bayernIdAttachmentService).getMessageAttachment(FILE_ID); - } - - @Test - void shouldCallBuildBayernIdAttachment() { - var contentStream = getContentStream(); - doReturn(contentStream).when(bayernIdAttachmentService).getAttachmentContentStream(any()); - - bayernIdAttachmentService.getMessageAttachment(FILE_ID); - - verify(bayernIdAttachmentService).buildBayernIdAttachment(metadata, contentStream); - } - - } - - @Nested - class TestLoadAttachmentError { - - @Test - @DisplayName("should throw TechnicalException if attachment not found") - void shouldThrowException() { - when(fileService.getFile(any())).thenReturn(null); - - assertThrows(TechnicalException.class, () -> bayernIdAttachmentService.getMessageAttachment(FILE_ID)); - } - - @Test - @DisplayName("should throw TechnicalException if metadata is null") - void shouldThrowExceptionIfNoMetadata() { - when(fileService.getFile(any())).thenReturn(gridFsfile); - when(gridFsfile.getMetadata()).thenReturn(null); - - assertThrows(TechnicalException.class, () -> bayernIdAttachmentService.getMessageAttachment(FILE_ID)); - } - } - - @Nested - class TestBuildBayernIdAttachment { - - @BeforeEach - void setup() { - when(metadata.getString(BayernIdAttachmentService.NAME_KEY)).thenReturn(BayernIdAttachmentTestFactory.FILENAME); - when(metadata.getString(BayernIdAttachmentService.CONTENT_TYPE_KEY)).thenReturn(BayernIdAttachmentTestFactory.CONTENT_TYPE); - } - - @Test - void shouldSetFileName() { - var attachment = buildBayernIdAttachment(); - - assertThat(attachment.getFileName()).isEqualTo(BayernIdAttachmentTestFactory.FILENAME); - } - - @Test - void shouldSetContent() { - var attachment = buildBayernIdAttachment(); - - assertThat(attachment.getContent()).hasSameContentAs(new ByteArrayInputStream(CONTENT)); - } - - @Test - void shouldSetContentType() { - var attachment = buildBayernIdAttachment(); - - assertThat(attachment.getContentType()).isEqualTo(BayernIdAttachmentTestFactory.CONTENT_TYPE); - } - - private BayernIdAttachment buildBayernIdAttachment() { - return bayernIdAttachmentService.buildBayernIdAttachment(metadata, getContentStream()); - } - } - - @Nested - class TestLoadingAttachmentContent { - - @BeforeEach - void init() { - when(fileService.getUploadedFileStream(any())) - .thenReturn(new ByteArrayInputStream(CONTENT)); - } - - @Test - void shouldGetInputStream() { - InputStream input = bayernIdAttachmentService.getAttachmentContentStream(FILE_ID); - - assertThat(input).hasSameContentAs(getContentStream()); - } - - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java deleted file mode 100644 index 2fe959b6e55845a65ad5596239816a23945759b3..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.bayernid; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; - -import de.ozgcloud.nachrichten.postfach.bayernid.BayernIdAttachment.BayernIdAttachmentBuilder; - -public class BayernIdAttachmentTestFactory { - - public final static String FILENAME = "test.txt"; - public final static String CONTENT_TYPE = "text/plain"; - public static final byte[] CONTENT = "test".getBytes(); - public static final long SIZE = 4L; - - public static BayernIdAttachment create() { - return createBuilder().build(); - } - - public static BayernIdAttachmentBuilder createBuilder() { - return BayernIdAttachment.builder() - .fileName(FILENAME) - .content(new ByteArrayInputStream(CONTENT)) - .contentType(CONTENT_TYPE); - } - - public static InputStream getContentStream() { - return new ByteArrayInputStream(CONTENT); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapperTest.java deleted file mode 100644 index f8f9dee1eea29e1a5d4939e54e597a96b0c8a924..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapperTest.java +++ /dev/null @@ -1,272 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.ZoneId; -import java.time.ZonedDateTime; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.Spy; - -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachmentMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachments; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -class BayernIdPostfachNachrichtMapperTest { - - @Spy - private BayernIdPostfachNachrichtMapper mapper = Mappers.getMapper(BayernIdPostfachNachrichtMapper.class); - - @Nested - class TestMapToSendBayernIdMessageMetadataRequest { - - private static final PostfachNachricht NACHRICHT = PostfachNachrichtTestFactory.create(); - private static final Absender ABSENDER = AbsenderTestFactory.create(); - - @Test - void shouldIgnoreAttachments() { - var request = mapper.toSendBayernIdMessageMetadataRequest(NACHRICHT, ABSENDER); - - assertThat(request.getAttachments()).isEqualTo(GrpcAttachments.getDefaultInstance()); - } - - @Test - void shouldCallToBayernIdMessageMetadata() { - mapper.toSendBayernIdMessageMetadataRequest(NACHRICHT, ABSENDER); - - verify(mapper).toBayernIdMessageMetadata(NACHRICHT, ABSENDER); - } - - @Nested - class TestMapToBayernIdMessageMetadata { - - @Test - void shouldSetMessageId() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getMessageId()).isEqualTo(MessageTestFactory.MESSAGE_ID); - } - - @Nested - class TestCreatedAt { - - @Test - void shouldCallConvertZonedDateTime() { - toMessageMetadata(); - - verify(mapper).convertZonedDateTime(PostfachNachrichtTestFactory.CREATED_AT); - } - - @Test - void shouldSetCreatedAt() { - doReturn(PostfachNachrichtTestFactory.CREATED_AT_STR).when(mapper).convertZonedDateTime(any()); - - var metadata = toMessageMetadata(); - - assertThat(metadata.getCreatedAt()).isEqualTo(PostfachNachrichtTestFactory.CREATED_AT_STR); - } - } - - @Test - void shouldSetSubject() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getSubject()).isEqualTo(MessageTestFactory.SUBJECT); - } - - @Test - void shouldSetStorkQaaLevel() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getStorkQaaLevel()).isEqualTo(BayernIdPostfachNachrichtMapper.MESSAGE_LEVEL); - } - - @Test - void shouldSetVorgangId() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldSetText() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getText()).isEqualTo(PostfachNachrichtTestFactory.MAIL_BODY); - } - - @Nested - class TestMapAbsender { - - @Test - void shouldSetName() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getAbsender().getName()).isEqualTo(AbsenderTestFactory.NAME); - } - - @Test - void shouldSetAnschrift() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getAbsender().getAnschrift()).isEqualTo(AbsenderTestFactory.ANSCHRIFT); - } - - @Test - void shouldSetDienst() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getAbsender().getDienst()).isEqualTo(AbsenderTestFactory.DIENST); - } - - @Test - void shouldSetMandant() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getAbsender().getMandant()).isEqualTo(AbsenderTestFactory.MANDANT); - } - - @Test - void shouldSetGemeindeschluessel() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getAbsender().getGemeindeschluessel()).isEqualTo(AbsenderTestFactory.GEMEINDE_SCHLUESSEL); - } - - } - - @Nested - class TestMapToEmpfaenger { - - @Test - void shouldSetPostkorbId() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getEmpfaenger().getPostkorbId()).isEqualTo(MessageTestFactory.POSTFACH_ID); - } - } - - private GrpcBayernIdMessageMetadata toMessageMetadata() { - return mapper.toBayernIdMessageMetadata(NACHRICHT, ABSENDER); - } - } - } - - @Nested - class TestMapToSendBayernIdAttachmentsMetadata { - - private static final BayernIdAttachment ATTACHMENT = BayernIdAttachmentTestFactory.create(); - - @Test - void shouldIgnoreMessageMetadata() { - var request = toMessageRequest(); - - assertThat(request.getMessageMetadata()).isEqualTo(GrpcBayernIdMessageMetadata.getDefaultInstance()); - } - - @Test - void shouldIgnoreContent() { - var request = toMessageRequest(); - - assertThat(request.getAttachments().getContent()).isEmpty(); - } - - @Test - void shouldCallToAttachmentsMetadata() { - toMessageRequest(); - - verify(mapper).toAttachmentMetadata(ATTACHMENT); - } - - private GrpcSendBayernIdMessageRequest toMessageRequest() { - return mapper.toSendBayernIdAttachmentsMetadataRequest(ATTACHMENT); - } - } - - @Nested - class TestMapToAttachmentMetadata { - - @Test - void shouldSetFileName() { - var metadata = toMessageRequest(); - - assertThat(metadata.getFileName()).isEqualTo(BayernIdAttachmentTestFactory.FILENAME); - } - - @Test - void shouldSetFileType() { - var metadata = toMessageRequest(); - - assertThat(metadata.getFileType()).isEqualTo(BayernIdAttachmentTestFactory.CONTENT_TYPE); - } - - private GrpcAttachmentMetadata toMessageRequest() { - return mapper.toAttachmentMetadata(BayernIdAttachmentTestFactory.create()); - } - } - - @Nested - class TestMapToGregorianCalendar { - - @Test - void shouldReturnGregorianCalendar() { - var expectedDateTiem = "2024-02-14T23:29:25.000+01:00"; - var dateTiem = ZonedDateTime.of(2024, 2, 14, 23, 29, 25, 0, ZoneId.of("Europe/Berlin")); - - var calendar = mapper.convertZonedDateTime(dateTiem); - - assertThat(calendar).isEqualTo(expectedDateTiem); - } - } - - @Nested - class TestMapFromSendBayernIdMessageResponse { - - @Test - void shouldSetSuccess() { - var result = mapper.fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponseTestFactory.create()); - - assertThat(result.isSuccess()).isTrue(); - } - - @Test - void shouldSetStatus() { - var result = mapper.fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponseTestFactory.create()); - - assertThat(result.getStatus()).isEqualTo(GrpcSendBayernIdMessageResponseTestFactory.STATUS); - } - - @Test - void shouldSetMessage(){ - var result = mapper.fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponseTestFactory.create()); - - assertThat(result.getMessage()).isEqualTo(GrpcSendBayernIdMessageResponseTestFactory.MESSAGE_TEXT); - } - } - - @Nested - class TestSkipNulls { - - @Test - void shouldNotSetNull() { - var bayernIdMessageMetadata = mapper.toBayernIdMessageMetadata(PostfachNachrichtTestFactory.createBuilder().messageId(null).build(), - AbsenderTestFactory.create()); - - assertThat(bayernIdMessageMetadata.getMessageId()).isEmpty(); - } - - @Test - void shouldReturnTrueIfNotNull() { - var result = mapper.nonNull("test"); - - assertThat(result).isTrue(); - } - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceTest.java deleted file mode 100644 index d9386a774121f94b44fb3cfe57c7fc6c9f5d3e4c..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceTest.java +++ /dev/null @@ -1,455 +0,0 @@ -/* - * Copyright (C) 2023 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.nachrichten.postfach.bayernid; - -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeoutException; -import java.util.function.BiFunction; -import java.util.function.Function; - -import org.apache.commons.lang3.StringUtils; -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.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.FileId; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.PostfachRuntimeException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.BayernIdProxyServiceGrpc; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; -import io.grpc.stub.CallStreamObserver; -import io.grpc.stub.StreamObserver; -import lombok.SneakyThrows; - -class BayernIdPostfachRemoteServiceTest { - - @Spy - @InjectMocks - private BayernIdPostfachRemoteService service; - - @Mock - private BayernIdProxyServiceGrpc.BayernIdProxyServiceStub bayernIdProxyServiceStub; - @Mock - private BayernIdProperties properties; - @Mock - private BayernIdPostfachResponseHandler responseHandler; - @Mock - private BayernIdPostfachNachrichtMapper mapper; - @Mock - private BayernIdAttachmentService attachmentService; - - @Nested - @DisplayName("Get all messages") - class TestGetAllMessages { - - @Test - void shouldThrowUnsupportedOperationException() { - assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(service::getAllMessages); - } - } - - @Nested - @DisplayName("Delete messages") - class TestDeleteMessages { - - @Test - void shouldThrowUnsupportedOperationException() { - assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(() -> service.deleteMessage(StringUtils.EMPTY)); - } - } - - @Nested - @DisplayName("Send message") - class TestSendMessage { - - @Mock - private GrpcSendBayernIdMessageResponse grpcResponse; - @Mock - private MessageWithFilesSender messageWithFilesSender; - @Mock - private BayernIdResponse bayernIdResponse; - - @Nested - class TestSend { - - @BeforeEach - void setup() { - doReturn(grpcResponse).when(service).waitUntilTransferCompleted(any()); - } - - @Test - void shouldCallCreateMessageWithFileSender() { - sendMessage(); - - verify(service).createMessageWithFilesSender(any()); - } - - @Test - void shouldCallSend() { - doReturn(messageWithFilesSender).when(service).createMessageWithFilesSender(any()); - - sendMessage(); - - verify(messageWithFilesSender).send(); - } - - @Test - void shouldCallWaitForResults() { - var expectedSender = mock(MessageWithFilesSender.class); - when(messageWithFilesSender.send()).thenReturn(expectedSender); - doReturn(messageWithFilesSender).when(service).createMessageWithFilesSender(any()); - - sendMessage(); - - verify(service).waitUntilTransferCompleted(expectedSender); - } - - @Test - void shouldCallMaapper() { - sendMessage(); - - verify(mapper).fromSendBayernIdMessageResponse(grpcResponse); - } - - @Test - void shouldCallResponseHandler() { - when(mapper.fromSendBayernIdMessageResponse(any())).thenReturn(bayernIdResponse); - - sendMessage(); - - verify(responseHandler).handleResponse(bayernIdResponse); - } - } - - @Nested - class TestExceptionHandling { - - @Test - void shouldHandleExceptionWhenSending() { - var thrownException = new RuntimeException("Test"); - when(messageWithFilesSender.send()).thenThrow(thrownException); - doReturn(messageWithFilesSender).when(service).createMessageWithFilesSender(any()); - - assertThrows(PostfachRuntimeException.class, TestSendMessage.this::sendMessage); - } - - @Test - void shouldHandleExceptionWhenWaiting() { - var thrownException = new RuntimeException("Test"); - doThrow(thrownException).when(service).waitUntilTransferCompleted(any()); - - assertThrows(PostfachRuntimeException.class, TestSendMessage.this::sendMessage); - } - - @Test - void shouldPassBayernIdServerException() { - doReturn(grpcResponse).when(service).waitUntilTransferCompleted(any()); - var thrownException = new BayernIdServerException("Test"); - doThrow(thrownException).when(responseHandler).handleResponse(any()); - - var resultException = assertThrows(BayernIdServerException.class, TestSendMessage.this::sendMessage); - assertThat(resultException).isEqualTo(thrownException); - } - } - - private void sendMessage() { - service.sendMessage(PostfachNachrichtTestFactory.create()); - } - } - - @Nested - class TestCreateMessageWithFileSender { - - @Mock - private Function<StreamObserver<GrpcSendBayernIdMessageResponse>, CallStreamObserver<GrpcSendBayernIdMessageRequest>> streamObserverBuilder; - @Mock - private GrpcSendBayernIdMessageRequest metadataRequest; - @Mock - private Function<String, BayernIdAttachment> attachmentBuilder; - @Mock - private Function<BayernIdAttachment, GrpcSendBayernIdMessageRequest> attachmentMetadataMapper; - @Mock - private BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder; - - @Test - void shouldSetStreamObserverBuilder() { - doReturn(streamObserverBuilder).when(service).buildCallStreamObserverBuilder(); - - var sender = createMessageWithFilesSender(); - - assertThat(sender).extracting("reqObserverBuilder").isEqualTo(streamObserverBuilder); - } - - @Test - void shouldCallMessageMetadataMapper() { - var absender = AbsenderTestFactory.create(); - when(properties.getAbsender()).thenReturn(absender); - var nachricht = PostfachNachrichtTestFactory.create(); - - service.createMessageWithFilesSender(nachricht); - - verify(mapper).toSendBayernIdMessageMetadataRequest(nachricht, absender); - } - - @Test - void shouldSetMessageMetadata() { - when(mapper.toSendBayernIdMessageMetadataRequest(any(), any())).thenReturn(metadataRequest); - - var sender = createMessageWithFilesSender(); - - assertThat(sender).extracting("messageMetadata").isEqualTo(metadataRequest); - } - - @Test - void shouldSetAttachmentIds() { - var nachricht = PostfachNachrichtTestFactory.create(); - - var sender = createMessageWithFilesSender(); - - assertThat(sender).extracting("attachmentIds").isEqualTo(nachricht.getAttachments()); - } - - @Test - void shouldSetAttachmentBuilder() { - doReturn(attachmentBuilder).when(service).buildAttachmentBuilder(); - - var sender = createMessageWithFilesSender(); - - assertThat(sender).extracting("toAttachment").isEqualTo(attachmentBuilder); - } - - @Test - void shouldSetAttachmentMetadataBuilder() { - doReturn(attachmentMetadataMapper).when(service).buildAttachmentMetadataMapper(); - - var sender = createMessageWithFilesSender(); - - assertThat(sender).extracting("attachmentMetadataMapper").isEqualTo(attachmentMetadataMapper); - } - - @Test - void shouldSetChunkBuilder() { - doReturn(chunkBuilder).when(service).buildChunkRequest(); - - var sender = createMessageWithFilesSender(); - - assertThat(sender).extracting("chunkBuilder").isEqualTo(chunkBuilder); - } - - private MessageWithFilesSender createMessageWithFilesSender() { - return service.createMessageWithFilesSender(PostfachNachrichtTestFactory.create()); - } - } - - @Nested - class TestBuildCallStreamObserverBuilder { - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - @Mock - private StreamObserver<GrpcSendBayernIdMessageResponse> responseObserver; - - @Test - void shouldCallSendMessageAsStream() { - service.buildCallStreamObserverBuilder().apply(responseObserver); - - verify(bayernIdProxyServiceStub).sendMessageAsStream(responseObserver); - } - - @Test - void shouldReturnRequestObserver() { - when(bayernIdProxyServiceStub.sendMessageAsStream(any())).thenReturn(requestObserver); - - var result = service.buildCallStreamObserverBuilder().apply(responseObserver); - - assertThat(result).isEqualTo(requestObserver); - } - } - - @Nested - class TestBuildAttachmentBuilder { - - @Captor - private ArgumentCaptor<FileId> attachmentIdCaptor; - - @Test - void shouldCallGetMessageAttachment (){ - var attachmentId = "test"; - - service.buildAttachmentBuilder().apply(attachmentId); - - verify(attachmentService).getMessageAttachment(attachmentIdCaptor.capture()); - assertThat(attachmentIdCaptor.getValue()).extracting(FileId::toString).isEqualTo(attachmentId); - } - - @Test - void shouldReturnAttachment() { - var attachment = BayernIdAttachmentTestFactory.create(); - when(attachmentService.getMessageAttachment(any())).thenReturn(attachment); - - var result = service.buildAttachmentBuilder().apply(StringUtils.EMPTY); - - assertThat(result).isEqualTo(attachment); - } - } - - @Nested - class TestBuildChunkRequest { - - @Captor - private ArgumentCaptor<byte[]> bytesCaptor; - @Captor - private ArgumentCaptor<Integer> lengthCaptor; - - @Test - void shouldReturnRequest() { - var bytes = new byte[] { 1, 2, 3 }; - var length = 3; - - var result = service.buildChunkRequest().apply(bytes, length); - - assertThat(result.getAttachments().getContent().toByteArray()).isEqualTo(bytes); - } - } - - @Nested - class TestBuildAttachmentMetadataMapper { - - private static final BayernIdAttachment ATTACHMENT = BayernIdAttachmentTestFactory.create(); - - @Mock - private GrpcSendBayernIdMessageRequest attachmentMetadataRequest; - - @Test - void shouldCallMapper() { - service.buildAttachmentMetadataMapper().apply(ATTACHMENT); - - verify(mapper).toSendBayernIdAttachmentsMetadataRequest(ATTACHMENT); - } - - @Test - void shouldReturnResult() { - when(mapper.toSendBayernIdAttachmentsMetadataRequest(any())).thenReturn(attachmentMetadataRequest); - - var result = service.buildAttachmentMetadataMapper().apply(ATTACHMENT); - - assertThat(result).isEqualTo(attachmentMetadataRequest); - } - } - - @Nested - class TestWaitUntilTransferCompleted { - - @Mock - private MessageWithFilesSender sender; - @Mock - private GrpcSendBayernIdMessageResponse grpcResponse; - @Mock - private CompletableFuture<GrpcSendBayernIdMessageResponse> resultFuture; - - @BeforeEach - void setup() { - doReturn(resultFuture).when(sender).getResultFuture(); - } - - @Test - void shouldCallGet() { - service.waitUntilTransferCompleted(sender); - - verify(sender).getResultFuture(); - } - - @Test - @SneakyThrows - void shouldReturnResult() { - when(resultFuture.get(anyLong(), any())).thenReturn(grpcResponse); - - var result = service.waitUntilTransferCompleted(sender); - - assertThat(result).isEqualTo(grpcResponse); - } - - @SneakyThrows - @Test - void shouldHandleInterruptedException() { - var interruptedException = new InterruptedException(); - - when(resultFuture.get(anyLong(), any())).thenThrow(interruptedException); - - assertThrows(TechnicalException.class, () -> service.waitUntilTransferCompleted(sender)); - verify(sender).cancelOnError(interruptedException); - } - - @Test - @SneakyThrows - void shouldHandleTimeout() { - when(resultFuture.get(anyLong(), any())).thenThrow(new TimeoutException()); - - assertThrows(TechnicalException.class, () -> service.waitUntilTransferCompleted(sender)); - verify(sender).cancelOnTimeout(); - } - - @Test - @SneakyThrows - void shouldHandleExecutionException() { - var executionException = new ExecutionException(new RuntimeException()); - when(resultFuture.get(anyLong(), any())).thenThrow(executionException); - - assertThrows(TechnicalException.class, () -> service.waitUntilTransferCompleted(sender)); - verify(sender).cancelOnTimeout(); - } - - } - - @Nested - class TestGetPostfach { - - @Test - void shouldHasTyp() { - var postfachType = service.getPostfachType(); - - assertThat(postfachType).isEqualTo(BayernIdPostfachRemoteService.POSTFACH_TYPE); - } - - @Test - void shouldSetReplyNotAllowed() { - var isReplyAllowed = service.isReplyAllowed(); - - assertThat(isReplyAllowed).isFalse(); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandlerTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandlerTest.java deleted file mode 100644 index f51750b664c3ad3b41642b8ae989eb7be8e91a2c..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandlerTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.mockito.InjectMocks; - -class BayernIdPostfachResponseHandlerTest { - - @InjectMocks - private BayernIdPostfachResponseHandler handler; - - @Nested - @DisplayName("Test successful Postfachserver response") - class TestSuccessfulPostfachServerResponse { - - @Test - void shouldNotThrowAnyException() { - assertThatCode(() -> handler.handleResponse(BayernIdResponseTestFactory.create())).doesNotThrowAnyException(); - } - } - - @Nested - @DisplayName("Test faulty Postfachserver response ") - class TestFaultyPostfachserverResponse { - - @DisplayName("Fehler im OK.KOMM-Schema") - @ParameterizedTest(name = "when response status: {0}") - @EnumSource(value = MailSendingResponseStatus.class, mode = EnumSource.Mode.EXCLUDE, names = { "SUCCESS" }) - void shouldThrowPostfachBadRequestExceptionForSchluessel(MailSendingResponseStatus responseStatus) { - var bayernIdResponse = BayernIdResponseTestFactory.createBuilder().success(false).status(responseStatus.getSchluessel()).build(); - - var exception = Assertions.assertThrows(BayernIdServerException.class, () -> handler.handleResponse(bayernIdResponse)); - assertThat(exception.getMessage()).startsWith("9006 / %s / %s".formatted(responseStatus.getSchluessel(), responseStatus.getMessage())); - } - - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPropertiesITCase.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPropertiesITCase.java deleted file mode 100644 index 273962d099c7d4efd9bb367a971665cf6482ff2d..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPropertiesITCase.java +++ /dev/null @@ -1,88 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.TestPropertySource; - -import de.ozgcloud.common.test.ITCase; - -@SpringBootTest(classes = { BayernIdProperties.class }) -@ITCase -class BayernIdPropertiesITCase { - - private static final String NAME = "test name"; - - @TestPropertySource(properties = { - "ozgcloud.bayernid.enabled=true", - "ozgcloud.bayernid.absender.postkorbId=28721c6f-b78f-4d5c-a048-19fd2fc429d2", - "ozgcloud.bayernid.absender.name=test name", - "ozgcloud.bayernid.absender.anschrift=Niemalsgasse 5, 99999 Irgendwo Stadt", - "ozgcloud.bayernid.absender.dienst=Stadtverwaltung", - "ozgcloud.bayernid.absender.mandant=Fürth", - "ozgcloud.bayernid.absender.gemeindeSchluessel=09563000", - }) - @DisplayName("Test loading bayernid configuration") - @Nested - class TestLoadingConfiguration { - - // TODO remove access data - private static final String POSTKORBID = "28721c6f-b78f-4d5c-a048-19fd2fc429d2"; - private static final String DIENST = "Stadtverwaltung"; - private static final String ANSCHRIFT = "Niemalsgasse 5, 99999 Irgendwo Stadt"; - private static final String PASSWORD = "SyPaRAxe97"; - private static final String RESOURCE_PATH = "bayernid.p12"; - private static final String MANDANT = "Fürth"; - private static final String GEMEINDE_SCHLUESSEL = "09563000"; - - @Autowired - private BayernIdProperties properties; - - @Test - void shouldHaveProperties() { - assertThat(properties).isNotNull(); - } - - @Test - void shouldHaveAbsender() { - assertThat(properties.getAbsender()) - .isNotNull() - .usingRecursiveComparison() - .isEqualTo(Absender.builder() - .anschrift(ANSCHRIFT) - .dienst(DIENST) - .name(NAME) - .mandant(MANDANT) - .gemeindeSchluessel(GEMEINDE_SCHLUESSEL) - .postkorbId(POSTKORBID).build()); - } - - } - - @TestPropertySource(properties = { "ozgcloud.other=test name" }) - @DisplayName("Test loading application context without bayerid properties") - @Nested - class TestLoadingOtherConfiguration { - - @Value("${ozgcloud.other}") - private String testValue; - - @Autowired(required = false) - private BayernIdProperties properties; - - @Test - void shouldLoadTestProperty() { - assertThat(testValue).isEqualTo(NAME); - } - - @Test - void shouldNotLoadBayernIdProperties() { - assertThat(properties).isNull(); - } - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponseTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponseTestFactory.java deleted file mode 100644 index 654daa5f583d37613870ac9e75beafb8b751bf75..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponseTestFactory.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.akdb.egov.bsp.nachrichten.BspQuittung; -import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType; -import de.ozgcloud.nachrichten.postfach.bayernid.BayernIdResponse.BayernIdResponseBuilder; - -public class BayernIdResponseTestFactory { - public static final String ERGAENZENE_HINWEISE = "ergaenzenderHinweis"; - - public static BayernIdResponse create() { - return createBuilder().build(); - } - - public static BayernIdResponseBuilder createBuilder() { - return BayernIdResponse.builder() - .success(true) - .status("0") - .message(ERGAENZENE_HINWEISE); - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BspNachrichtTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BspNachrichtTestFactory.java deleted file mode 100644 index 53ebdd4821421d811e0cbfdd6b5159be0a4cea8f..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BspNachrichtTestFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.akdb.egov.bsp.nachrichten.BspNachricht; -import de.akdb.egov.bsp.nachrichten.NachrichtenKopfType; -import lombok.val; - -public class BspNachrichtTestFactory { - public static final NachrichtenKopfType NACHRICHTEN_KOPF_TYPE = NachrichtenKopfTypeTestFactory.create(); - - public static BspNachricht create() { - val bspNachricht = new BspNachricht(); - bspNachricht.setNachrichtenKopf(NACHRICHTEN_KOPF_TYPE); - return bspNachricht; - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/EmpfaengerTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/EmpfaengerTypeTestFactory.java deleted file mode 100644 index 7bb257f8aa31f1686a0e22f7a321587df1cd340d..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/EmpfaengerTypeTestFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import java.util.UUID; - -import de.akdb.egov.bsp.nachrichten.EmpfaengerType; -import lombok.val; - -public class EmpfaengerTypeTestFactory { - public static final String POSTKORB_ID = UUID.randomUUID().toString(); - - public static EmpfaengerType create() { - val empfaengerType = new EmpfaengerType(); - empfaengerType.setPostkorbId(POSTKORB_ID); - return empfaengerType; - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSenderTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSenderTest.java deleted file mode 100644 index 75536d889d2d71675831d5ab35d0c116cfbce111..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSenderTest.java +++ /dev/null @@ -1,214 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.io.InputStream; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiFunction; - -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.test.util.ReflectionTestUtils; - -import de.ozgcloud.nachrichten.postfach.bayernid.FileSender.StreamReader; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import io.grpc.stub.CallStreamObserver; -import lombok.SneakyThrows; - -class FileSenderTest { - - private FileSender fileSender; - - @Mock - private BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder; - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - @Mock - private GrpcSendBayernIdMessageRequest metadata; - @Mock - private InputStream inputStream; - - @BeforeEach - void setup() { - fileSender = spy(new FileSender(chunkBuilder, requestObserver, metadata, inputStream)); - } - - @Nested - class TestSend { - - @Test - void shouldCallSendMetadata() { - fileSender.send(); - - verify(fileSender).sendMetadata(); - } - - @Test - void shouldCallSendNextChunk() { - when(requestObserver.isReady()).thenReturn(true); - doAnswer(invocation -> { - ((AtomicBoolean) ReflectionTestUtils.getField(fileSender, "done")).set(true); - return null; - }).when(fileSender).sendNextChunk(); - - fileSender.send(); - - verify(fileSender).sendNextChunk(); - } - - @Test - void shouldNotCallSendNextChunkWhenDone() { - ((AtomicBoolean) ReflectionTestUtils.getField(fileSender, "done")).set(true); - - fileSender.send(); - - verify(fileSender, never()).sendNextChunk(); - } - - @Test - void shouldNotCallSendNextChunkWhenNotReady() { - fileSender.send(); - - verify(fileSender, never()).sendNextChunk(); - } - } - - @Nested - class TestSendMetadata { - - @Test - void shouldCallOnNextOnce() { - fileSender.sendMetadata(); - fileSender.sendMetadata(); - - verify(requestObserver).onNext(metadata); - } - - } - - @Nested - class TestSendNextChunk { - - @Test - void shouldCallSendChunk() { - var contentToSend = new byte[] { 1, 2, 3, 4, 5 }; - setContent(contentToSend); - - fileSender.sendNextChunk(); - - verify(fileSender).sendChunk(contentToSend, 5); - } - - @Test - void shouldReturnContentLength() { - var contentToSend = new byte[] { 1, 2, 3, 4, 5 }; - setContent(contentToSend); - - var length = fileSender.sendNextChunk(); - - assertThat(length).isEqualTo(contentToSend.length); - } - - @Test - void shouldCallEndTransfer() { - setContent(new byte[] {}); - - fileSender.sendNextChunk(); - - verify(fileSender).endTransfer(); - } - - @SneakyThrows - void setContent(byte[] contentToSend) { - var streamReader = getStreamReader(); - ReflectionTestUtils.setField(streamReader, "buffer", contentToSend); - when(inputStream.read(any(), anyInt(), anyInt())).thenReturn(contentToSend.length); - } - - } - - @Nested - class TestEndTransfer { - - @Mock - private StreamReader streamReader; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(fileSender, "streamReader", streamReader); - } - - @Test - void shouldSetDone() { - fileSender.endTransfer(); - - var done = (AtomicBoolean) ReflectionTestUtils.getField(fileSender, "done"); - assertThat(done.get()).isTrue(); - } - - @Test - void shouldCloseStream() { - fileSender.endTransfer(); - - verify(streamReader).close(); - } - } - - @Nested - class TestSendChunk { - - @Mock - private GrpcSendBayernIdMessageRequest chunkRequest; - - private byte[] contentToSend = new byte[] { 1, 2, 3, 4, 5 }; - private int length = 5; - - - @Test - void shouldCallChunkBuilder() { - fileSender.sendChunk(contentToSend, length); - - verify(chunkBuilder).apply(contentToSend, length); - } - - @Test - void shouldCallOnNext() { - when(chunkBuilder.apply(any(), anyInt())).thenReturn(chunkRequest); - - fileSender.sendChunk(contentToSend, length); - - verify(requestObserver).onNext(chunkRequest); - } - - } - - StreamReader getStreamReader() { - return (StreamReader) ReflectionTestUtils.getField(fileSender, "streamReader"); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FreiTextTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FreiTextTypeTestFactory.java deleted file mode 100644 index 27bcc4302706006d3805a00f3b6687a984bb1db6..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FreiTextTypeTestFactory.java +++ /dev/null @@ -1,15 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.akdb.egov.bsp.nachrichten.FreiTextType; -import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType; -import lombok.val; - -public class FreiTextTypeTestFactory { - public static final String MESSAGE_TEXT = "Test Nachricht\n\nHallo"; - - public FreiTextType create() { - val freiText = new FreiTextType(); - freiText.setText(MESSAGE_TEXT); - return freiText; - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/IdentifikationNachrichtTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/IdentifikationNachrichtTypeTestFactory.java deleted file mode 100644 index 26259ff56ce885b971b1b84c9925e810576f4d92..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/IdentifikationNachrichtTypeTestFactory.java +++ /dev/null @@ -1,36 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import java.time.Instant; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.UUID; - -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import javax.xml.datatype.XMLGregorianCalendar; - -import de.akdb.egov.bsp.nachrichten.IdentifikationNachrichtType; -import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType; -import lombok.val; - -class IdentifikationNachrichtTypeTestFactory { - public static final XMLGregorianCalendar ERSTELLUNGSZEITPUNKT = now(); - public static final String NACHRICHTEN_ID = UUID.randomUUID().toString(); - - private static XMLGregorianCalendar now() { - try { - val c = new GregorianCalendar(); - c.setTime(Date.from(Instant.now())); - return DatatypeFactory.newInstance().newXMLGregorianCalendar(c); - } catch (DatatypeConfigurationException e) { - throw new RuntimeException(e); - } - } - - public static IdentifikationNachrichtType create() { - IdentifikationNachrichtType identifikationNachrichtType = new IdentifikationNachrichtType(); - identifikationNachrichtType.setNachrichtenId(NACHRICHTEN_ID); - identifikationNachrichtType.setErstellungszeitpunkt(ERSTELLUNGSZEITPUNKT); - return identifikationNachrichtType; - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatusTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatusTest.java deleted file mode 100644 index 6fa7835b896f46dfe1adb6b651e60924b62ca294..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatusTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Test; - -class MailSendingResponseStatusTest { - - @Test - void shouldCreateSuccessResult() { - assertThat(MailSendingResponseStatus.SUCCESS.getSchluessel()).isEqualTo("0"); - } - - @Test - void shouldCreateFromSchluessel() { - assertThat(MailSendingResponseStatus.fromSchluessel("20")).isEqualTo(MailSendingResponseStatus.ERROR_IN_MESSAGE_SCHEMA); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSenderTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSenderTest.java deleted file mode 100644 index 1efd3e30ec8f02a80a7601b6920e6ce40ab2dcd8..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSenderTest.java +++ /dev/null @@ -1,405 +0,0 @@ -/* - * 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.nachrichten.postfach.bayernid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.io.InputStream; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiFunction; -import java.util.function.Function; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.common.binaryfile.BinaryFileUploadStreamObserver; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; -import io.grpc.stub.CallStreamObserver; -import io.grpc.stub.StreamObserver; - -class MessageWithFilesSenderTest { - - private MessageWithFilesSender messageWithFilesSender; - - @Mock - private Function<StreamObserver<GrpcSendBayernIdMessageResponse>, CallStreamObserver<GrpcSendBayernIdMessageRequest>> reqObserverBuilder; - @Mock - private GrpcSendBayernIdMessageRequest messageMetadata; - @Mock - private List<String> attachmentIds; - @Mock - private Function<String, BayernIdAttachment> toAttachment; - @Mock - private Function<BayernIdAttachment, GrpcSendBayernIdMessageRequest> attachmentMetadataMapper; - @Mock - private BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder; - - @BeforeEach - void setup() { - messageWithFilesSender = spy( - MessageWithFilesSender.builder().reqObserverBuilder(reqObserverBuilder).messageMetadata(messageMetadata).toAttachment(toAttachment) - .attachmentMetadataMapper(attachmentMetadataMapper).chunkBuilder(chunkBuilder).build()); - } - - @Nested - class TestSend { - - @Mock - private BinaryFileUploadStreamObserver<GrpcSendBayernIdMessageRequest, GrpcSendBayernIdMessageResponse> responseStreamObserver; - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @Test - void shouldReturnSameObject() { - var result = messageWithFilesSender.send(); - - assertThat(result).isSameAs(messageWithFilesSender); - } - - @Test - void shouldCallRequestObserverBuilder() { - try (var createMock = Mockito.mockStatic(BinaryFileUploadStreamObserver.class)) { - createMock.when(() -> BinaryFileUploadStreamObserver.create(any(), any())).thenReturn(responseStreamObserver); - - messageWithFilesSender.send(); - - verify(reqObserverBuilder).apply(responseStreamObserver); - } - } - - @Test - void shouldSetRequestStreamObserver() { - when(reqObserverBuilder.apply(any())).thenReturn(requestObserver); - - messageWithFilesSender.send(); - - assertThat(messageWithFilesSender).extracting("requestObserver").isSameAs(requestObserver); - } - } - - @Nested - class TestSendNext { - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver); - } - - @Test - void shouldCheckIfDone() { - doNothing().when(messageWithFilesSender).waitForObserver(); - - messageWithFilesSender.sendNext(); - - verify(messageWithFilesSender).waitForObserver(); - } - - @Test - void shouldRetrunIfDone() { - ((AtomicBoolean) ReflectionTestUtils.getField(messageWithFilesSender, "done")).set(true); - - messageWithFilesSender.sendNext(); - - verify(messageWithFilesSender, never()).waitForObserver(); - } - - @Test - void shouldCallSendMetadata() { - doNothing().when(messageWithFilesSender).waitForObserver(); - - messageWithFilesSender.sendNext(); - - verify(messageWithFilesSender).sendMetadata(); - } - - @Test - void shouldCallSendAttachments() { - doNothing().when(messageWithFilesSender).waitForObserver(); - - messageWithFilesSender.sendNext(); - - verify(messageWithFilesSender).sendAttachments(); - } - } - - @Nested - class TestSendMetadata { - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver); - } - - @Test - void shouldCallOnNextOnce() { - messageWithFilesSender.sendMetadata(); - messageWithFilesSender.sendMetadata(); - - verify(requestObserver).onNext(messageMetadata); - } - - } - - @Nested - class TestSendAttachments { - - private String attachmentId = "id1"; - - @Mock - private FileSender fileSender; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "attachmentIds", List.of(attachmentId)); - doNothing().when(messageWithFilesSender).completeRequest(); - } - - @Test - void shouldCallCreateFileSenders() { - doReturn(fileSender).when(messageWithFilesSender).buildFileSender(any()); - - messageWithFilesSender.sendAttachments(); - - verify(messageWithFilesSender).createFileSenders(); - } - - @Test - void shouldNotRecreateFileSenders() { - ReflectionTestUtils.setField(messageWithFilesSender, "fileSenders", List.of(fileSender)); - - messageWithFilesSender.sendAttachments(); - - verify(messageWithFilesSender, never()).createFileSenders(); - } - - @Test - void shouldCallSendOnFileSender() { - doReturn(fileSender).when(messageWithFilesSender).buildFileSender(any()); - - messageWithFilesSender.sendAttachments(); - - verify(fileSender).send(); - } - - @Test - void shouldCallCompleteRequest() { - doReturn(fileSender).when(messageWithFilesSender).buildFileSender(any()); - - messageWithFilesSender.sendAttachments(); - - verify(messageWithFilesSender).completeRequest(); - } - } - - @Nested - class TestCreateFileSenders { - - private String attachmentId = "id1"; - - @Mock - private FileSender fileSender; - - @BeforeEach - void setup() { - doReturn(fileSender).when(messageWithFilesSender).buildFileSender(any()); - ReflectionTestUtils.setField(messageWithFilesSender, "attachmentIds", List.of(attachmentId)); - } - - @Test - void shouldCalToAttachment() { - messageWithFilesSender.createFileSenders(); - - verify(toAttachment).apply(attachmentId); - } - - @Test - void shouldCallBuildFileSender() { - messageWithFilesSender.createFileSenders(); - - verify(messageWithFilesSender).buildFileSender(any()); - } - - @Test - void shouldReturnFileSenders() { - var result = messageWithFilesSender.createFileSenders(); - - assertThat(result).containsExactly(fileSender); - } - } - - @Nested - class TestBuildFileSender { - - private String attachmentId = "id1"; - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - @Mock - private GrpcSendBayernIdMessageRequest attachmentMetadata; - - @Mock - private BayernIdAttachment attachment; - @Mock - private InputStream inputStream; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver); - } - - @Test - void shouldSetChunkBuilder() { - var result = messageWithFilesSender.buildFileSender(attachment); - - assertThat(result).extracting("chunkBuilder").isSameAs(chunkBuilder); - } - - @Test - void shouldSetRequestObserver() { - var result = messageWithFilesSender.buildFileSender(attachment); - - assertThat(result).extracting("requestObserver").isSameAs(requestObserver); - } - - @Test - void shouldCallAttachmentMetadataMapper() { - ReflectionTestUtils.setField(messageWithFilesSender, "attachmentMetadataMapper", attachmentMetadataMapper); - - messageWithFilesSender.buildFileSender(attachment); - - verify(attachmentMetadataMapper).apply(attachment); - } - - @Test - void shouldSetAttachmentMetadata() { - ReflectionTestUtils.setField(messageWithFilesSender, "attachmentMetadataMapper", attachmentMetadataMapper); - when(attachmentMetadataMapper.apply(any())).thenReturn(attachmentMetadata); - - var result = messageWithFilesSender.buildFileSender(attachment); - - assertThat(result).extracting("metadata").isSameAs(attachmentMetadata); - } - - @Test - void shouldGetContent() { - messageWithFilesSender.buildFileSender(attachment); - - verify(attachment).getContent(); - } - } - - @Nested - class TestCompleteRequest { - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver); - } - - @Test - void shouldSetDone() { - messageWithFilesSender.completeRequest(); - - var done = (AtomicBoolean) ReflectionTestUtils.getField(messageWithFilesSender, "done"); - assertThat(done.get()).isTrue(); - } - - @Test - void shouldCallOnCompleted() { - messageWithFilesSender.completeRequest(); - - verify(requestObserver).onCompleted(); - } - } - - @Nested - class TestCancelOnTimeout { - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver); - } - - @Test - void shouldCallCancelOnRequestObserver() { - messageWithFilesSender.cancelOnTimeout(); - - verify(requestObserver).onError(any(TechnicalException.class)); - } - - @Test - void shouldCancelResultFuture() { - messageWithFilesSender.cancelOnTimeout(); - - assertThat(messageWithFilesSender.getResultFuture()).isCancelled(); - } - } - - @Nested - class TestCancelOnError { - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver); - } - - @Test - void shouldCallCancelOnRequestObserver() { - var exception = new RuntimeException("test"); - messageWithFilesSender.cancelOnError(exception); - - verify(requestObserver).onError(exception); - } - - @Test - void shouldCancelResultFuture() { - messageWithFilesSender.cancelOnError(new TechnicalException("test")); - - assertThat(messageWithFilesSender.getResultFuture()).isCancelled(); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenInhaltTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenInhaltTypeTestFactory.java deleted file mode 100644 index 81b662cf485c3b63cc47a10efe6e200317ad6501..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenInhaltTypeTestFactory.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.akdb.egov.bsp.nachrichten.NachrichtenInhaltType; -import lombok.val; - -public class NachrichtenInhaltTypeTestFactory { - public static final String BETREFF = "Test Nachricht"; - - public NachrichtenInhaltType create() { - val nachrichtenInhalt = new NachrichtenInhaltType(); - nachrichtenInhalt.setBetreff(BETREFF); - return nachrichtenInhalt; - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenKopfTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenKopfTypeTestFactory.java deleted file mode 100644 index 9cb13186991901bd55196c58a7b014f81c027936..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenKopfTypeTestFactory.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.akdb.egov.bsp.nachrichten.AbsenderType; -import de.akdb.egov.bsp.nachrichten.EmpfaengerType; -import de.akdb.egov.bsp.nachrichten.IdentifikationNachrichtType; -import de.akdb.egov.bsp.nachrichten.NachrichtenKopfType; -import lombok.val; - -public class NachrichtenKopfTypeTestFactory { - public static final IdentifikationNachrichtType IDENTIFIKATION_NACHRICHT_TYPE = IdentifikationNachrichtTypeTestFactory.create(); - public static final AbsenderType ABSENDER_TYPE = AbsenderTypeTestFactory.create(); - public static final EmpfaengerType EMPFAENGER_TYPE = EmpfaengerTypeTestFactory.create(); - - public static NachrichtenKopfType create() { - val nachrichtenKopfType = new NachrichtenKopfType(); - nachrichtenKopfType.setIdentifikationNachricht(IDENTIFIKATION_NACHRICHT_TYPE); - nachrichtenKopfType.setAbsender(ABSENDER_TYPE); - nachrichtenKopfType.setEmpfaenger(EMPFAENGER_TYPE); - return nachrichtenKopfType; - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/SendBspNachrichtNativeOutputTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/SendBspNachrichtNativeOutputTestFactory.java deleted file mode 100644 index 39f1abeb800207070aa8b8c7220a4089501db60b..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/SendBspNachrichtNativeOutputTestFactory.java +++ /dev/null @@ -1,15 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import akdb.bsp.postkorb.komm.webservice.SendBspNachrichtNativeOutput; -import lombok.val; - -public class SendBspNachrichtNativeOutputTestFactory { - - public static final String BSP_QUITTUNG = "quittung"; - - public static SendBspNachrichtNativeOutput create() { - val result = new SendBspNachrichtNativeOutput(); - result.setBspQuittung(BSP_QUITTUNG); - return result; - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/ZuVorgangTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/ZuVorgangTypeTestFactory.java deleted file mode 100644 index 5d2c0229fd95c42a9a75df693792b50b70d35baf..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/ZuVorgangTypeTestFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import java.util.UUID; - -import de.akdb.egov.bsp.nachrichten.ZuVorgangType; -import lombok.val; - -public class ZuVorgangTypeTestFactory { - public static final String VORGANG_ID = UUID.randomUUID().toString(); - - public static ZuVorgangType create() { - val vorgang = new ZuVorgangType(); - vorgang.setVorgangsId(VORGANG_ID); - return vorgang; - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentServiceTest.java deleted file mode 100644 index dc473e132bf0dff050351527495b0c78b211ff09..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentServiceTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.sql.Date; -import java.time.Instant; - -import org.bson.BsonObjectId; -import org.bson.BsonValue; -import org.bson.Document; -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 com.mongodb.client.gridfs.model.GridFSFile; - -import de.ozgcloud.nachrichten.postfach.BinaryFileService; -import de.ozgcloud.nachrichten.postfach.FileId; - -class MessageAttachmentServiceTest { - private static final FileId FILE_ID = FileId.from("42"); - - @InjectMocks - private MessageAttachmentService messageAttachmentService; - - @Mock - private BinaryFileService fileService; - - private GridFSFile gridFsfile; - - @Nested - class TestLoadingAttachment { - @BeforeEach - void init() { - Document metadata = new Document(); - metadata.put("name", MessageAttachmentTestFactory.FILENAME); - BsonValue id = new BsonObjectId(); - gridFsfile = new GridFSFile(id, FILE_ID.toString(), 0, 0, Date.from(Instant.now()), metadata); - - when(fileService.getFile(any())).thenReturn(gridFsfile); - when(fileService.getUploadedFileStream(any())) - .thenReturn(new ByteArrayInputStream(MessageAttachmentTestFactory.DECODED_CONTENT.getBytes())); - } - - @Test - void shouldHaveAttachmentWithFileName() { - MessageAttachment attachment = messageAttachmentService.getMessageAttachment(FILE_ID); - - assertThat(attachment.getFileName()).isEqualTo(MessageAttachmentTestFactory.FILENAME); - } - - @Test - void shouldHaveAttachmentContent() { - MessageAttachment attachment = messageAttachmentService.getMessageAttachment(FILE_ID); - - assertThat(attachment.getContent()).isEqualTo(MessageAttachmentTestFactory.CONTENT); - } - - } - - @Nested - class TestLoadingAttachmentContent { - @BeforeEach - void init() { - when(fileService.getUploadedFileStream(any())) - .thenReturn(new ByteArrayInputStream(MessageAttachmentTestFactory.DECODED_CONTENT.getBytes())); - } - - @Test - void shouldGetInputStream() { - InputStream input = messageAttachmentService.getAttachmentContentStream(FILE_ID); - - assertThat(input).isNotNull(); - } - - @Test - void shouldGetContent() throws IOException { - String input = messageAttachmentService.getAttachmentContent(FILE_ID); - - assertThat(input).isEqualTo(MessageAttachmentTestFactory.CONTENT); - } - } - - @Nested - class TestMapAttachmentFile { - - @Test - void shouldMapFileName() { - var attachmentFile = messageAttachmentService.mapAttachmentFile(MessageAttachmentTestFactory.create()); - - assertThat(attachmentFile.getName()).isEqualTo(MessageAttachmentTestFactory.FILENAME); - } - - @Test - void shouldMapContent() { - var attachmentFile = messageAttachmentService.mapAttachmentFile(MessageAttachmentTestFactory.create()); - - assertThat(attachmentFile.getContent()).hasContent(MessageAttachmentTestFactory.CONTENT); - } - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java deleted file mode 100644 index 17181b240ad7645e49afd5c977cefdb925226425..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -public class MessageAttachmentTestFactory { - - public final static String FILENAME = "test.txt"; - public static final String CONTENT = "dGVzdA=="; - public static final String DECODED_CONTENT = "test"; - public static final long SIZE = 4L; - - public static MessageAttachment create() { - return createBuilder().build(); - } - - public static MessageAttachment.MessageAttachmentBuilder createBuilder() { - return MessageAttachment.builder().fileName(FILENAME).content(CONTENT); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageJsonReplyTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageJsonReplyTestFactory.java deleted file mode 100644 index 43dd50e2c6728e4931e4a5a2c651f689ccad7742..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageJsonReplyTestFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.osi; - -public class MessageJsonReplyTestFactory { - - private static final String REPLY_JSON_TMPL = """ - [{ - "messageId": "%s", - "nameIdentifier": "%s", - "body": "%s", - "isHtml": false, - "replyAction": %d, - "subject": "%s", - "sequenceNumber": "%s", - "eidasLevel": 1, - "isObligatory": true, - "attachments": [{ - "fileName": "%s", - "content": "%s" - }] - }]"""; - - public static String buildReplyJson() { - return buildReplyJson(MessageTestFactory.create(), MessageAttachmentTestFactory.create()); - } - - public static String buildReplyJson(Message msg, MessageAttachment attachement) { - return String.format(REPLY_JSON_TMPL, - msg.getMessageId(), - msg.getPostfachId(), - msg.getMailBody(), - msg.getReplyOption().toValue(), - msg.getSubject(), - msg.getVorgangId(), - attachement.getFileName(), - attachement.getContent()); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java deleted file mode 100644 index a60eb1180946699746247df1c19a3b2fd6039e5e..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import java.util.List; -import java.util.UUID; - -import de.ozgcloud.nachrichten.postfach.osi.Message.EidasLevel; - -public class MessageTestFactory { - - public static final String MESSAGE_ID = UUID.randomUUID().toString(); - public static final String POSTFACH_ID = UUID.randomUUID().toString(); - public static final String VORGANG_ID = UUID.randomUUID().toString(); - - public static final String MAIL_BODY = "Body<br>String"; - public static final boolean IS_HTML = false; - public static final ReplyOption REPLY_OPTION = ReplyOption.MANDATORY; - public static final String SUBJECT = "Test Subject"; - - public static final EidasLevel EIDAS_LEVEL = EidasLevel.MEDIUM; - public static final boolean RECHTSVERBINDLICH = true; - - public static final List<MessageAttachment> ATTACHMENTS = List.of(MessageAttachmentTestFactory.create()); - - public static Message create() { - return createBuilder().build(); - } - - public static Message.MessageBuilder createBuilder() { - return Message.builder() // - .messageId(MESSAGE_ID) // - .postfachId(POSTFACH_ID) // - .mailBody(MAIL_BODY) // - .isHtml(IS_HTML) // - .replyOption(REPLY_OPTION) // - .subject(SUBJECT) // - .vorgangId(VORGANG_ID) // - .eidasLevel(EIDAS_LEVEL) // - .rechtsverbindlich(RECHTSVERBINDLICH) // - .attachments(ATTACHMENTS); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java deleted file mode 100644 index 03296b4b114b2e57e1b4e6158f9cd09ca50cbbd3..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; -import java.time.temporal.ChronoUnit; -import java.util.List; - -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.nachrichten.postfach.FileId; -import de.ozgcloud.nachrichten.postfach.PostfachAddressTestFactory; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; - -class OsiPostfachMessageMapperTest { - - @InjectMocks - private OsiPostfachMessageMapper mapper = Mappers.getMapper(OsiPostfachMessageMapper.class); - @Mock - private MessageAttachmentService messageAttachmentService; - @Mock - private GrpcObjectMapper grpcObjectMapper; - - @DisplayName("To mail") - @Nested - class TestToNachricht { - - @Test - void shouldSetDirection() { - var mail = mapper.toPostfachNachricht(MessageTestFactory.create()); - - assertThat(mail.getDirection()).isEqualTo(Direction.IN); - } - - @Test - void shouldSetCreatedAt() { - var mail = mapper.toPostfachNachricht(MessageTestFactory.create()); - - assertThat(mail.getCreatedAt()).isNotNull().isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS)); - } - - @Test - void shouldIgnoreSentInformation() { - var mail = mapper.toPostfachNachricht(MessageTestFactory.create()); - - assertThat(mail.getSentAt()).isNull(); - assertThat(mail.getSentSuccessful()).isNull(); - } - - @Test - void shouldPersistAttachment() { - mapper.toPostfachNachricht(MessageTestFactory.create()); - - verify(messageAttachmentService).persistAttachment(MessageTestFactory.VORGANG_ID, MessageTestFactory.ATTACHMENTS.get(0)); - } - - @Test - void shouldSetPostfachAddress() { - var expectedPostfachAddress = PostfachAddressTestFactory.createBuilder().serviceKontoType(OsiPostfachRemoteService.POSTFACH_TYPE).build(); - - var mail = toMail(); - - assertThat(mail.getPostfachAddress()).usingRecursiveComparison().isEqualTo(expectedPostfachAddress); - } - - @Test - void shouldPreserveNewLineInBody() { - var bodyText = "line\nline"; - var mail = mapper.toPostfachNachricht(MessageTestFactory.createBuilder().mailBody(bodyText).build()); - - assertThat(mail.getMailBody()).isEqualTo(bodyText); - } - - @Test - void shouldRecodeAND() { - var mail = mapper.toPostfachNachricht(MessageTestFactory.createBuilder().mailBody("this&that").build()); - - assertThat(mail.getMailBody()).isEqualTo("this&that"); - } - - private PostfachNachricht toMail() { - return mapper.toPostfachNachricht(MessageTestFactory.create()); - } - } - - @DisplayName("To osi message") - @Nested - class TestToOsiMessage { - - @Test - void shouldCallAttachmentService() { - var fileId = FileId.from("42"); - - toOsiMessage(PostfachNachrichtTestFactory.createBuilder().attachments(List.of(fileId.toString())).build()); - - verify(messageAttachmentService).getMessageAttachment(fileId); - } - - @Test - void shouldMapFields() { - var message = toOsiMessage(PostfachNachrichtTestFactory.create()); - - assertThat(message.getSubject()).isEqualTo(MessageTestFactory.SUBJECT); - assertThat(message.getAttachments()).hasSize(1); - } - - @Test - void shouldMapMailBody() { - var message = toOsiMessage(PostfachNachrichtTestFactory.create()); - - assertThat(message.getMailBody()).isEqualTo(MessageTestFactory.MAIL_BODY); - } - - @Test - void shouldReplaceNewLineToHtml() { - var bodyText = "line\nline&"; - var message = toOsiMessage(PostfachNachrichtTestFactory.createBuilder().mailBody(bodyText).build()); - - assertThat(message.getMailBody()).isEqualTo("line<br>line&"); - } - - @DisplayName("build postfachId") - @Nested - class TestToPostfachId { - - @DisplayName("by existing postfachAddress") - @Nested - class TestWithExistingPostfachAddress { - - @Test - void shouldMapPostfachAddressToPostfachId() { - var message = toOsiMessage(PostfachNachrichtTestFactory.create()); - - assertThat(message.getPostfachId()).isEqualTo(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); - } - } - - @DisplayName("by postfachId if postfachAddress not exists") - @Nested - class TestWithoutPostfachAddress { - - @Test - void shouldMapPostfachAddressToPostfachId() { - var message = toOsiMessage(PostfachNachrichtTestFactory.createBuilder().postfachAddress(null).build()); - - assertThat(message.getPostfachId()).isEqualTo(MessageTestFactory.POSTFACH_ID); - } - } - } - - private Message toOsiMessage(PostfachNachricht postfachNachricht) { - return mapper.toOsiMessage(postfachNachricht); - } - } - - @DisplayName("To HTML body") - @Nested - class TestToHTMLBody { - - @Test - void shouldNotContainNewlines() { - var body = mapper.replaceNewlines(MessageTestFactory.MAIL_BODY); - - assertThat(body).doesNotContain("\n"); - } - - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceTest.java deleted file mode 100644 index 0681df0f45b9605bd5d025636913836084c8e21f..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceTest.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach.osi; - -import static de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.client.match.MockRestRequestMatchers.*; -import static org.springframework.test.web.client.response.MockRestResponseCreators.*; - -import java.util.stream.Collectors; - -import org.assertj.core.api.InstanceOfAssertFactories; -import org.assertj.core.util.Arrays; -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.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.test.util.ReflectionTestUtils; -import org.springframework.test.web.client.ExpectedCount; -import org.springframework.test.web.client.MockRestServiceServer; -import org.springframework.test.web.client.ResponseActions; -import org.springframework.web.client.RestTemplate; - -import de.ozgcloud.nachrichten.postfach.NotConfiguredException; -import de.ozgcloud.nachrichten.postfach.PostfachBadRequestException; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; - -class OsiPostfachRemoteServiceTest { - - private static final String TEST_URL = "https://testUrl.local"; - private static final String TEST_API_KEY = "dummyApiKey"; - private static final String TEST_API_REALM = "dummyApiRealm"; - - @InjectMocks - private OsiPostfachRemoteService service; - - @Mock - private OsiPostfachMessageMapper mapper; - - @Spy - private RestTemplate restTemplate; - - @Spy - private OsiPostfachProperties properties = new OsiPostfachProperties(); - { - properties.setUrl(TEST_URL); - properties.setRealm(TEST_API_REALM); - properties.setKey(TEST_API_KEY); - } - - private MockRestServiceServer mockServer; - - @BeforeEach - void initMockServer() { - mockServer = MockRestServiceServer.createServer(restTemplate); - } - - @Nested - class TestGetAllMessages { - - @BeforeEach - void init() { - prepareMockServer(); - } - - @Test - void shouldCallRestTemplateExchange() { - service.getAllMessages(); - - mockServer.verify(); - } - - @Test - void shouldFillMessage() { - when(mapper.toPostfachNachricht(any())).thenReturn(PostfachNachrichtTestFactory.create()); - - var messages = service.getAllMessages(); - - assertThat(messages).hasSize(1).first().usingRecursiveComparison().isEqualTo(PostfachNachrichtTestFactory.create()); - } - - @Test - void shouldThrowExceptionIfNotConfigured() { - properties.setUrl(null); - - assertThrows(NotConfiguredException.class, () -> service.getAllMessages()); - } - - @Test - void shouldHaveAttachment() { - var messages = Arrays.array(MessageTestFactory.create()); - doReturn(ResponseEntity.ok().body(messages)).when(restTemplate).exchange(TEST_URL, HttpMethod.GET, null, Message[].class); - when(mapper.toPostfachNachricht(messages[0])).thenReturn(PostfachNachrichtTestFactory.create()); - - var postfachNachrichten = service.getAllMessages(); - - assertThat(postfachNachrichten).hasSize(1).first() - .extracting(PostfachNachricht::getAttachments, InstanceOfAssertFactories.LIST) - .hasSize(1) - .usingRecursiveComparison().isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS); - } - - @Test - void shouldCallMapper() { - prepareMockServer(); - - service.getAllMessages().collect(Collectors.toList()); - - verify(mapper).toPostfachNachricht(any()); - } - - private void prepareMockServer() { - mockServer.expect(ExpectedCount.once(), requestTo(TEST_URL)) - .andExpect(method(HttpMethod.GET)) - .andRespond(withSuccess(MessageJsonReplyTestFactory.buildReplyJson(), MediaType.APPLICATION_JSON)); - } - - } - - @Nested - class TestSendMessage { - - private PostfachNachricht message = PostfachNachrichtTestFactory.create(); - - @Test - void shouldCallRestTemplateExchange() { - prepareMockServer(); - - service.sendMessage(message); - - mockServer.verify(); - } - - @Test - void shouldThrowExceptionUrlIfNotConfigured() { - prepareMockServer(); - - properties.setUrl(null); - - assertThrows(NotConfiguredException.class, () -> service.sendMessage(message)); - } - - @Test - void shouldThrowExceptionKeyIfNotConfigured() { - prepareMockServer(); - - properties.setKey(null); - - assertThrows(NotConfiguredException.class, () -> service.sendMessage(message)); - } - - @Test - void shouldThrowExceptionIfNoRestTemplate() { - ReflectionTestUtils.setField(service, "restTemplate", null); - - assertThrows(NotConfiguredException.class, () -> service.sendMessage(message)); - } - - @Test - void shouldThrowBadRequestExceptionOnHttpClientError() { - prepareMockServer().andRespond(withStatus(HttpStatus.BAD_REQUEST)); - - assertThrows(PostfachBadRequestException.class, () -> service.sendMessage(message)); - } - - @Test - void shouldCallMapper() { - prepareMockServer(); - - service.sendMessage(message); - - verify(mapper).toOsiMessage(any()); - } - - @Nested - class TestResponse { - - @Test - void shouldThrowServerProcessExceptionOnResponseBodyFalse() { - prepareMockServerWithResponseBody(false); - - assertThrows(OsiPostfachServerProcessException.class, () -> service.sendMessage(message)); - - mockServer.verify(); - } - - void prepareMockServerWithResponseBody(boolean body) { - mockServer.expect(ExpectedCount.once(), requestTo(TEST_URL)) - .andExpect(method(HttpMethod.POST)) - .andRespond(withSuccess(String.valueOf(body), MediaType.APPLICATION_JSON)); - } - } - - @DisplayName("rest request body") - @Nested - class TestRestRequestBody { - - @Test - void shouldHaveVorgangIdAsSequenceNumber() { - var postfachNachricht = PostfachNachrichtTestFactory.create(); - when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create()); - - prepareMockServer().andExpect(jsonPath("$.sequenceNumber").value(VORGANG_ID)); - - service.sendMessage(postfachNachricht); - } - - @Test - void shouldHavePostfachIdAsNameIdentifier() { - var postfachNachricht = PostfachNachrichtTestFactory.create(); - when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create()); - - prepareMockServer().andExpect(jsonPath("$.nameIdentifier").value(POSTFACH_ID)); - - service.sendMessage(postfachNachricht); - } - - @Test - void shouldHaveSubject() { - var postfachNachricht = PostfachNachrichtTestFactory.create(); - when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create()); - - prepareMockServer().andExpect(jsonPath("$.subject").value(SUBJECT)); - - service.sendMessage(postfachNachricht); - } - - @Test - void shouldHaveMailBodyAsBody() { - var postfachNachricht = PostfachNachrichtTestFactory.create(); - when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create()); - - prepareMockServer().andExpect(jsonPath("$.body").value(MAIL_BODY)); - - service.sendMessage(postfachNachricht); - } - - @Test - void shouldHaveNumericReplyOptionAsReplyAction() { - var postfachNachricht = PostfachNachrichtTestFactory.create(); - when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create()); - - prepareMockServer().andExpect(jsonPath("$.replyAction").value(REPLY_OPTION.toValue())); - - service.sendMessage(postfachNachricht); - } - } - - private ResponseActions prepareMockServer() { - var responseAction = mockServer.expect(ExpectedCount.once(), requestTo(TEST_URL)) - .andExpect(method(HttpMethod.POST)); - - responseAction.andRespond(withSuccess()); - return responseAction; - } - } - - @Nested - class TestDeleteMessage { - - private final String DELETE_URL = TEST_URL + "?messageGuid=" + MessageTestFactory.MESSAGE_ID; - - @Test - void shouldCallRestTemplateExchange() { - prepareMockServer(); - - service.deleteMessage(MessageTestFactory.MESSAGE_ID); - - mockServer.verify(); - } - - @Test - void shouldThrowExceptionIfNotConfigured() { - prepareMockServer(); - - properties.setUrl(null); - - assertThrows(NotConfiguredException.class, () -> service.deleteMessage(MessageTestFactory.MESSAGE_ID)); - } - - private void prepareMockServer() { - mockServer.expect(ExpectedCount.once(), requestTo(DELETE_URL)) - .andExpect(method(HttpMethod.DELETE)) - .andRespond(withSuccess()); - } - } - - @Nested - class TestGetPostfach { - - @Test - void shouldHasTyp() { - var postfachType = service.getPostfachType(); - - assertThat(postfachType).isEqualTo(OsiPostfachRemoteService.POSTFACH_TYPE); - } - - @Test - void shouldAllowReplys(){ - var isReplyAllowed = service.isReplyAllowed(); - - assertThat(isReplyAllowed).isTrue(); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessExceptionTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessExceptionTestFactory.java deleted file mode 100644 index 15e4c59df6f344321021502aeb0ff4887b86b2e8..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessExceptionTestFactory.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.osi; - -public class OsiPostfachServerProcessExceptionTestFactory { - - public static OsiPostfachServerProcessException create() { - return new OsiPostfachServerProcessException(); - } - -} diff --git a/nachrichten-manager/src/test/resources/BspQuittung.xml b/nachrichten-manager/src/test/resources/BspQuittung.xml deleted file mode 100644 index 5ef6f03ba16cb71ca6fc4ad8aac9e2c8e5847c21..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/resources/BspQuittung.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<ns2:BspQuittung - xmlns:ns2="http://www.akdb.de/egov/bsp/nachrichten" - xmlns:ns3="urn:akdb:bsp:postkorb:komm:webservice"> - <ns2:AnnahmeErfolgreich>true</ns2:AnnahmeErfolgreich> -</ns2:BspQuittung> diff --git a/nachrichten-manager/src/test/resources/BspQuittungError.xml b/nachrichten-manager/src/test/resources/BspQuittungError.xml deleted file mode 100644 index e54e673e0523cc2d18e38ff90e6778d71740ceaa..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/resources/BspQuittungError.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<ns2:BspQuittung - xmlns:ns2="http://www.akdb.de/egov/bsp/nachrichten" - xmlns:ns3="urn:akdb:bsp:postkorb:komm:webservice"> - <ns2:AnnahmeErfolgreich>false</ns2:AnnahmeErfolgreich> - <ns2:ErgebnisStatus> - <ns2:Tabelle>9006</ns2:Tabelle> - <ns2:Schluessel>1</ns2:Schluessel> - </ns2:ErgebnisStatus> - <ns2:ErgaenzendeHinweise>Test error</ns2:ErgaenzendeHinweise> -</ns2:BspQuittung> diff --git a/nachrichten-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/nachrichten-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension deleted file mode 100644 index 79b126e6cdb86bec1f4f08c205de8961bde1934a..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension +++ /dev/null @@ -1 +0,0 @@ -org.mockito.junit.jupiter.MockitoExtension \ No newline at end of file diff --git a/nachrichten-manager/src/test/resources/SamlResponse.xml b/nachrichten-manager/src/test/resources/SamlResponse.xml deleted file mode 100644 index d28738585aa627bc0bd4e6b7288ff3346ea4029e..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/resources/SamlResponse.xml +++ /dev/null @@ -1,128 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ~ Copyright (c) 2024. - ~ 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. - --> - -<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" - Destination="https://deep-touching-condor.ngrok-free.app/login/saml2/sso/bayernid" - ID="_d75103771f4e3869ca4bf743efb51320" InResponseTo="ARQf371368-b6eb-4708-b90d-e8a9c5fc0ffd" - IssueInstant="2024-02-07T10:27:18.456Z" Version="2.0"> - <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">https://infra-pre-id.bayernportal.de/idp - </saml2:Issuer> - <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> - <ds:SignedInfo> - <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/> - <ds:Reference URI="#_d75103771f4e3869ca4bf743efb51320"> - <ds:Transforms> - <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> - <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - </ds:Transforms> - <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> - <ds:DigestValue>y8O2/uKwgap3hb7Ym/sn+v0e3l+w0Z+wIFe11xXkSHU=</ds:DigestValue> - </ds:Reference> - </ds:SignedInfo> - <ds:SignatureValue> - G4fZCUS7Z+7PwDF7J+ZwXssM+iHBgxt34Uf4U3PWrbaYROrCZFD3hlVwCj35Z7RlQkDBi4q1m9RW6XGGVx2vpUDjT9dTkfbF7tB9PXa6l4mq3RyxuRELMwRpcbnamfe02qwtp0N7n9+gdjTVPb2xTMhp7FVG3OZ46OKwwJIm6jNLE+zVbKkNmxnv8XqGK+FgDS82CCG6Zi8nIZZkR80vHuRnSwrpStiInWSURoIYvG8nQfJ6u6IxbtMkDPtLrQHP6th9NMEyODe4RrjNwH8ERkbBl+rvtz406y3hngOW4uxNSTdQGOWj68t7LSn78S+Zc+5g/8up8gRIY6FWB5QxTl+GINIskcoWEfpyQcY932Jh9jGKFRBj2bcP0xALOeP+LTAz1O3hY0EZD0HpjILNhjp4/4Ki6SSeoVrp4UdEZGPpfFAMXdA9unjQGf5DqT3los5mH+KgkpAQoIU0725tIJuGojigXDIKgbNftB1oXjepcqcWvdnbRZlE9Kk4iU2YcVKGxHtEGi03+Qr2M37SqnooXw94Q0LxOQHU0jaOuw+nA8JbcvbpmHVbh7Qyg6OfrI/g+1pwhaQWrL6zEDDlgF3Fj6QxZGhMviCf43WJd8nPPwLIp0dFxXmbX5yBnpAPC4txJkf4idH8gze054O0Zf9G35vFH8oxELrA+d3qbPY= - </ds:SignatureValue> - <ds:KeyInfo> - <ds:X509Data> - <ds:X509Certificate>MIIFbzCCA1egAwIBAgIJAPdFXXarkBN2MA0GCSqGSIb3DQEBCwUAME4xCzAJBgNVBAYTAkRFMQ8w - DQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVuMQ0wCwYDVQQKDARBS0RCMQwwCgYDVQQL - DANJRE0wHhcNMjAxMDI3MTMxODQxWhcNMjUxMDI2MTMxODQxWjBOMQswCQYDVQQGEwJERTEPMA0G - A1UECAwGQmF5ZXJuMREwDwYDVQQHDAhNdWVuY2hlbjENMAsGA1UECgwEQUtEQjEMMAoGA1UECwwD - SURNMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzDtWAEdC3J9FD+ti1exRhN1lzNgK - WqO2gQNdJvlt7KGHA2VGGO7tqRogTuoqi/ydtiHJ8+lhp4kcWqyfv7i9HXOncvcsRRmRdZjUY2Iu - i6ozJqD5LVm/vP5YfdP7vQPdbqyyfpoJhf3mbMEtdNDdGRnGIPUfDn+CFbo37f9tPwMgf3jgh4gx - aujtLIhhr9gevVTEeZAFu9EvzLNd3kEtRb7MuXqIOdu1rW8HlGYFwwVLqEyBn8XG0QAIfhMmGjFM - G7z+Kco2quwOmmZVzWQfeH/3AlN2KbcPt7j+pl+6Bew2AAivP7O+95YKORqQjTu3rPWMF4txPId3 - 7MSjoytwBRyd5EACTvhQBOGrDFKQUOx6fTtRc8+7XGVz8MdQaZQWQXXh1ByU783twNdnRSrSVIyL - djiy1uCbjvsSAtbzGBygPIvDo3skCNLNFXsChtHIfFFDK20KPGb0ghEDf2q3hDbFG3ZDGGynZmJc - ZKuZhJqodJ/++sAXADyTJNAPVYDjKCF4ypELp2Eu/p1gaQPJEb74L/ZFZVOEJFyXIiaqB9J+fcn/ - biqHHOmcCi8n9aIiNt1fatr1Z4lQRWoGtKaGU0+bzUSH4Bgs2EG4u1CI2MKDWqK2aEsHrtu8tbS9 - LrUmDVKtaEUOeul8xWVa036vp/YUIdiJNZSxZG4iTmSOATECAwEAAaNQME4wHQYDVR0OBBYEFFYe - ltslkaolOmcINXQeSe7nURwpMB8GA1UdIwQYMBaAFFYeltslkaolOmcINXQeSe7nURwpMAwGA1Ud - EwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAKqAlXoO41SAiycYUOrR90pfwTCysmbtHF5RWSCM - jF2aCG8URJ7bXwC0lBH8E5zCetFZwdqZziQtxzRkIOfhS5uWbH0RDhwuxZG+5RTPyaHPAZI6e5xH - Du8vHl/VbC3lnL/6K8l+Purr/yo8qkJqrPgThZRL9jBQyYRhDSsJUyIw5zcKKUQC/JWtMQAQcopb - jekCs6xDT1HqIN90Sc/gOfYjNo0dGMNmro9mxcw82Iow18KNVdtEexfD+/6x4NPD61pzuQEe09TR - +Cv3XyzBoGQ/2arijcPnGvth79ffVFtRSf3fSs7wEKV9g3mEWXFDtPBhDj6K0kKU/kJfEZixkXl9 - 2MY+bmugrtTIrazjtfrgMglIAHu9XCYWd/gef0J+PNfHsxgbTEr3XSC+5/xoFKPQSw3PgV8lkUDq - 4mJUKy/q4YmA37XQxourFR5pWvF03YACdtq6zPjtVeI7Cvkte6k0YW5S3cx9RmPv6YZhlaZ5ERpW - Niv6IjokLsvNeemf2PApjO7Q2EDBIoHBYH31wwJSsyRDrSVmbaqLFI15fLXeh2A4YbaBDZdGvDiL - OAk+dG1wdZ2aGw/uNBzMtc8VeKqI1HPcqIluBA3uUPpyLLA+9hDPf6Pp4j0gkXxBikz+/h22bFxE - 1HmDiOSkEn+2NmOHuEFeA+D8jsCAL5VJ3emK - </ds:X509Certificate> - </ds:X509Data> - </ds:KeyInfo> - </ds:Signature> - <saml2p:Status xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"> - <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/> - </saml2p:Status> - <saml2:EncryptedAssertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"> - <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="_baed1174200b81b1bff3856cb4e6365c" - Type="http://www.w3.org/2001/04/xmlenc#Element"> - <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" - xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"/> - <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> - <xenc:EncryptedKey Id="_5a164760d15a61d269e1f7fdd9872a10" Recipient="https://antragsraum.ozgcloud.de/" - xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"> - <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" - xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"> - <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" - xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/> - </xenc:EncryptionMethod> - <ds:KeyInfo> - <ds:X509Data> - <ds:X509Certificate> - MIIDsTCCApmgAwIBAgIUdw/27be5+2vj+MhGtoJjDsMsdDEwDQYJKoZIhvcNAQELBQAwaDELMAkG - A1UEBhMCREUxDzANBgNVBAgMBkJheWVybjERMA8GA1UEBwwITXVlbmNoZW4xDzANBgNVBAoMBm1n - bSB0cDEkMCIGCSqGSIb3DQEJARYVamVucy5yZWVzZUBtZ20tdHAuY29tMB4XDTI0MDExNjEyMjI0 - OVoXDTI1MDExNTEyMjI0OVowaDELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJheWVybjERMA8GA1UE - BwwITXVlbmNoZW4xDzANBgNVBAoMBm1nbSB0cDEkMCIGCSqGSIb3DQEJARYVamVucy5yZWVzZUBt - Z20tdHAuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/HBBWBDSrEgdwXkSy15V - 00EaVTyLgc4vh/JcDiGIYZSqmcMwBd+B1u36xbdBf/duEtCUymMNP48OMjgFZtR6xn0meuR4NR6Y - kn9mYGdU/GhldGuGv9XLAEAkVuTlo0H1QYyBS/6JwKQoSsHDkJ3YwDwKcyOt7QtpSadRZjQEN3gD - vWoRYjgXTxj2I1ovllmi0zOHsFi5PBIuiPWUdJvBrHxpD/XVS9R/qzJpHPu3bjQ6UVRmhiZCUF7H - 5F/PQNwk+qXvjV0ooBeSWWO5hywhk4OP4QEgbYMOSo20YukYX8TJEsum1pwIcQrw7kW4GyKaAycy - Rsa1fbM3tEkj+TiBKwIDAQABo1MwUTAdBgNVHQ4EFgQUfDL/6R33SJodsONCvxKy96AtU18wHwYD - VR0jBBgwFoAUfDL/6R33SJodsONCvxKy96AtU18wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B - AQsFAAOCAQEA+PCnvSwKU+bArTCIg5lfrwONbzKkjvPUymDNYX3oj1wVEN75hNf0RD7Rr0//ZYT3 - Rt0G193gjDcH1gbGIYhMLeGGkxEous2l3O+pRIQRR+hprjr6HzF8IphaJy1RbDwyGsXyLcyOylPL - 4cX9IjUdhklHiLZusBq95LSyw7hsCOAL2+vn816O7yv+28EWXXbnP2XEUjW36nxcZvR6oTJUplXy - HRuuJJTsOxGRNuXA3UVgNbkdm1HnoSGpnsGdUKsUFoEmEJkcSdQRwxeH21WzYGOZmKMcvx2gObaS - P8tafWh5z4Jx+Z7z5WP72Jt44/lnVjaV8aGo0KHXwgqQOtYftQ== - </ds:X509Certificate> - </ds:X509Data> - </ds:KeyInfo> - <xenc:CipherData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"> - <xenc:CipherValue> - ffr9pG/yL4QGQ4o1z/t6HH5XRG8pMHHjzlVTq6uC4eRpVvaNMz8XpUXqNAFGiB0Xbpkm++qOhGsOuz5Wffq5Qo78fMBfU95L1Lk9cVH1pUFfYyz5GV1LqlhStAZrCGHUdv5d0O7JLKgbi45JxxTc7ErAwPlOMqKLs95ZJuhl8Fp9XcYrdzW9IjuwmkB/HyPyjBWV066gaCMLImeBdCzBZc0pxuvH9jq8eX7h1B1eCd5F1LIoj35YDeU3PA/P/E6tLBxdGLFws+nYqNU3B5R2FPPoW+LP9zM7Q+SR20ti1Uh6TEMha05sJjWXFJU78PpJAtEl978ifqqO/23lYXYCrA== - </xenc:CipherValue> - </xenc:CipherData> - </xenc:EncryptedKey> - </ds:KeyInfo> - <xenc:CipherData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"> - <xenc:CipherValue> - YvHcO5br8vWMo/vreVcU8MQylgUmU6vxmvEoUJ07+8kSV0prHD46TtuXHXsLnsYKQMs+SM6bnTWMooNxIy8b0/BvIG4lg/l3m+SwoP56+lOMx26mTEwz9dJT+4BTFH25i3GbWQd86AbD4wT2X9juExE1t6uq1bhACqgeA1erhy/fjTS+1fKKbOTdC0DF35idejruc/YFyV/BNRMHncfj5BnFQFUmXT0b2Fg+WyUAIzflqwXmUhdzmQNl2uqZDL2Vaw4vQp1a9S0ePD3t+QCSGtCYcmqvg+FhooS1KfhqITNinzi07KaQNW6sY0uXpnq3/BGWxXrU58rmU24AQ5ozAgwPfpmOnZhyUURSikvKmvcpD8DPy8jMOxi+rd/tYlxokjPjFSV8ixh0fGZl+7mDAt/YvxBOSSln3nUEMVoKMNgUT3ax6cyUTBXOxt1EMLYuAcHRIBpF2R9MYasmaaR1RntlkKPiomaPdGqIgh1HtkmuwkS6npAH68d0ObD/SpRqu+vPuu++RxHPlbIjShbJWYUJIqPJlhtG7/p9VkC3514t/H1cgxALKstC95OXNH8S6b4m+atl1Wf4PELfHD7lT/QgYHwZk2/xhoWduKc18nauB4kc3v3FZ8nIO3iCgBkXT8qq+/1wJgOnVqAEFWs8w8AC99gHoTgm04q+JUw9XramIXEOdJ10/2Y8HW97XCt53KG+kbaJZe7DISx+2eh79ed3BxEzwgqcXlsrIVcezXWJAl2myFxUggn3c/N1ckgOWFwENOSDFXS6WAtSo/8dlXYvgZTYyKVvVO7l5oq5al2ESrFkHqB3WKu0q9LaWEKw7jMy6FnOawSOjJ2t5o43hfqs9+Wg3J7bgM8YjDuuNZIJ55SO7NIdeeFOkkgGMgcmF0svsxGKbHhdkvqa0t0BLtase7dNIgfWY5laXU7xBn+HEhrz9ZR1xnk8gK28KZwR1wO72rpcV9igsbek5cxEJ/hAk9NSHw7VXAgXZJ6VKZapJfoOqanE50FfK8z0TaoKBUbc1kfOAFnB0n9nUKpUXyyqfiu12w4n3lAs3tBB2S4w3UW5Mef1ZGdF8dqs/T0GUs819vrwYENVUM8u1usP44MnMdTw2i3eo6/VYrCOo1tsa31t46BbLEnercEdGDgpOOBjuda+C3G4NtlDEFzM8rN2FspLS5wphCvKiTB867Q9nrsXOQdDTiwXs2wOpVq1utASdV82Yam1ucVVfriDWlLlhFsFpZnUmwG4zwCPqah2t8inSwx9jramTbJnXpihRw75mFGFC5QAalnV/EAtZ58ecIz4PVTRq4zP7OKtwnN+qIOMm//8AOl6e5H/At7qWB5/dVjw8BUdIxaUF+e33NdQG6x8IEbMhlGFTGCjv5E0h27D/AbqCBU6PKrkGZowZHtKNtz7nITysa0hpyefM0rQkFHwf4NmR8uSHZ9YoT8VLStTtrF6daHSYlUT45EDXkiSA7NCAX8BIDbZNGxPGNCWR3reZxtQoJ89YPPdQngyqMn7sB1T4sP+euWpnAOOF5VDA2xyM2WtPzuKDZFD0XH5r3AqKf2jl+E1/jSBlhW1Y677WVLTLJm7+lMYYLK6YVaSsKQp10lOdhcNSoNF2iWUwmdCTfkrYIqM6Dz6FiYSrg1TTlOJb7Mg/z54eO6utHzIRFepBTL+pu9qP38Y21NtpUWu//jh0vpniXu1rzGQvuiuoNGIiqYA/dL39cpLB5JIwEVWNsnlHvzRcYQnqg2mhdkFMNZPhZwb3f+BV3GNA/dTziazHEgUN5G0esGl85PlZM7oLrPkXe1mYKh3pVRVHx9bScTQ/KR/Dll0NI1d5ul2SZa80Pmj29voelfMUa5Ml5q4zHzXK6N1E70ujMzWWJB025gLIb3e7aE9eN/5SJegL2ctob8uNQCTSouel6ko+Ykw/pstPL8IYWgsAwrckmzNJHasZi9MB9re639Zf+bDvflpigNboH6Jgzs7us5C2dozH1s5IzGP4XzgeALu8XP/T2coQxhj9xfaAJFrtqWRse9MM9gKIWCBEIzzIPeMa0+S7QAKAd7XRS/oZSDeqUFK2jRkrpbEnUxRErfX6lmHWlaY4CU8XKbSYU13LkuJcyzCm9EN/BU7f5cOwaVwSLMfOQeOx0GwJ5KRF4F30pVQIKfQmXt627TEmrutHr2mIgBLcte+S052JdumcRFMnlNLlmpl/rnOrU0bBeNDtXHQuYCWwfgiyZ47J2OZ+R68v0lA8mSdHFtJ81mbGnYQZn6PnZ/gbKz8uTu5WZE6CQ+n8IY6uvd8B0EYOjaoJK/FTQRjnYe6cBWTQFfmFzH441Ao3vcfKh6co4d5Ec1L9PXQWXidhCv4aJw1G06zgOTIcLCqvE3rbBpYOFUOmKlQbBmaIiKWqG+Xqk34jbQgzfHmcFO96sqh6B64/OzjPdjQupzCTM9hBNwSUABWoOAb9Yn0wtCUU5tRMTXf2DessFKbm5Jygvbh7KrBIQX3SGLQ1sHY+MYVbDpRTyi6/cATCCSWcekyT08mEh52KDKbrTR4CFdu2B7wsIqKxoiW4XiHOOc7DGtgVaCXgoce0nd9YXrtXbIjriMddx7wo/A5xvQbTOyaBuL/j3893Ny6eU10c18p8tZCzdBO1VOWH+R+8TkdvhkA995xzrdvjw7RoSdO7eqdyiOqkHBJGAp+OVSMWf0+/kHKRQf3LTT+CcwYN+7mx+Qz6Uw6Squ6/9JsxsEfIQ3VRsa84hUjcmmKf4QTpzy54RIteqPZc0kNQPobpKmvyWUUjldV0jgYi98XfErrdLQF3gyU/TG0kOsEPjuskIHoLEEka+nGXOjbtxj7HZe7onJ54kIluMkHeKfLWOMoZ2Qx9tqYMoGtbvLf6RrKh7METcaenirAS0waZfYWbIKS/XQQnlG0kWmK2VbUtKpKwAkjlEFEkYo8NtYRTqB1gYp7iyOhOcYT8Hdd6y+276P+sF+FuuXBAd1WJ8GWosOGcBOSMlvbxOyuaa58K10CUcBu3UNYMXfbifsNunrPPaJClyHK279gtweail/SVEc9XoyUh2uP/sL2eU3edeOBnscRj+0TXCkr+8auzW2BlMHrzDniQBXnFQelm94yDB4Ue3BfqKlkPmfC9QO+X/Jsjl6RtIQ6kqvwz9ZQ9uzFi4ZS5xd0I/IBp621GEXFkqIZhx13ohoiGa1KlhXS1AkDSRptzy7DlkW/ZDR3rh4WKGYsIF7/09WGtSPzicF8E3Mc9BS1OBksTuDuC1ayo6o0qxgEED0s3tNKE4GMQ5Kr9glfvoTbkMtgJst2R+Tq0/HozNCp5Dr4cqTcOZwOTtyPtZbdmzmdfT66mkdC4P1e8JPGugtHv+5HC8u0PSyBQGEewIo7g417mxC/5mf84Cp+1a/TLTe5mb4xqycaUexYM8+jLy4YdStpvR0NuTcx3ZzTwsi357S3NfACfLnU2BnD5WyvID9Y3uNd7Mawa4b+631WfuMdFWBOa3qQYifzdnzo98CpkpatCn5HSse87LqTxZ8Cm8ziu42g/uKcHuvGJXDzcFSD4wk0qclvpcdrSfhRZfU9H/YFK4JuW6q9aAvL24DgdD9mBDI2Gz94xFwu7u9iMivTQXEC5vgHD2lvdH9XtnpHxElqTBN4whFTujk9ZhjcEY50ntoaplQOs0N3S9XhQhLMjNz+g6CvY77jTq+3pdoGffuoecbD/hOWZqebdqaC5Oa7ytnH/YY2J6L3tCTaFloqNOetWvre3uaz5aNh4i6F4f4Z4CkTWGksHPcKdukMQDMNb0gm+JiWt9Wa2bHhQ1KmK+XQHZEIEM6GAhzIDCk0kMeKiyyE3zOwIJomqjHZVb5O4GmpJ1oONZzBSyvdBusaRYl1r8MT5BWgh0f8l34wc5pMxmvZUT11hZPDzawPfKLYCqHDAPvAEOR7JDkOBb3X8ILMRUIGslzzu17y0gP9qiOOuwadoyTcTHxvPJaEc6lQYn3j9E44C3TxDGpNOHl9rgT0EkRT4o2QNLNXXAoKPl2lFw/8goob9s73dMqtzeRwVVJdoC9kGv7TBzDJcs6yIXMM9EvExeuotANi99JdL4xLUZiRrtcv3+fJnIsJPdgczGYV/9ScODFIsa8N3fNFiIOe9b+5gPDwutGVYoSf2Fs+mzsbrxLv7/D+7vRAQxlya9WCvWtw8YjkTaBTEX+y8FUOHtHDBczu4XXEHaznZ1chnV/Pb5FkX78BiEO86ai1dB6v5+F2J/MLdEWhqEvEW8QYAPB6AYwfdEeVZX5igCF17mqbCqS/sg3z/hdW0iLSnjVeYqHXwTHbuFWM/c0MLCddnqvO49vZacWzXHk86wRyghbQTJUx3HUa/mJDGACZysvHLGzv2qjmlsKviokYLWA/Wsg2G1UV3eAmVq7VXt9s3v8nFvTRyqeWeHIkBpw45NFOR/H1sUjWAklBWOdiT/db0y6SOCvaTxVWqnk/6nL+/7vhhF3Zp9HrImt8+lk2vpeAS12YD8mHS/LJPWY+nLBWu1t0yI4aca70gJsBGJI5NvZbDGGe6f5SGfxbVHCr5NS/cBOUMOo+Oh87/IYv2XGZPwvD+7S9b84VnZVXdj9lQh0Et+v+zbaRkB4lquJMoGnF5UwcLtV0/RQybThfIpOYjNMs1LuW/6jPS6PCKlxeUGNwDvlKDCQlDhZkAQ1PPVPMlhA7QlMceaSYXnRLzI+IHJBQb6freSwWF6zBHYFI9H39CxxUUjIiR5sv5ViOi8tO5RgHtF3bsj3i8yQS43SdFTe0C4cxIuBuQMuSz7laE8/gZl3yGo7Wjgy/3RknSjla2sUt0d6PLQ2QQndxcWHKCNt19i6sYTttLqrywCHrjSyYwEBlWEC2nioEDONieaFc3iticbgSD/a5xzW9aefnQVFZWCRWkP0wVtBkf/tGtHl9PXau4+TV66rTq5X9aY3jEeU83OCnsuY5zBHFm3S5blMlvA+ebCcEWhyHDVwLfI7FAQ7fmcz3xO9cQf0waI6CK70yV+poRFAKDiCD1HELm6ij1KR/y2uWPF3LZ5P3pMGTr2W5hnC7Kvh+yqGvaID2L1athALmORgJHv1CDQzx0AzxfGMvUkgtQq8bCdjf0XvX1H4SKiPylc/2AwFM1PwS8eR429YnIMwJ6yyAQ68u5VyEGaFMdyrXX3I/vYStWcuUBrsN4oheWxIcNVKO1fFC0f6O0N5bRf8Kjyz9siRZK3z+vsU/zD1l6ShheQdoDeiXQKYgv91C7X3dJEx7fo60lRHVurySIUq1J5omLBMSl8b8F7Eqw1jTmZlVvSHcgzulhNYbv88MA1reVj6RQOfRA8LfaNID/RA89xAPYuEadd92uAjbQqExObqj5ELcNmhqOX/JrB+hn2aef3pWzSJmy98C9FdJuvF2l2XnZ5sDS25I9hnuCRAHeyHoAk4/VfjqEIjTN8BG1b0sTjSwJFBlHJCwBsKaaJviwXl5qynN1Z2f0IjoZ4gzwl9QDtcZDqYxk+qxbWDFqc9Nz/dhFLjGYTpX8VNEedNaa4/c/wTOpq7KioMEzASNlfwoIk9Ha6Xpph4PDoumFoeE6ONFEHNK3LgPDzEDfjj8HykTkq/VZIA7uN4BaaGFAi5Ah66FuVFFT7Mp9vUMvCfSH/Wdx/AYijS5WNBULlDpLJeLQ79oJfZ1ItrBOfD7oBSt5hIK7qoVM2aCMXwdOVSE6M34SJfgMPC9MCfcJudvQjDvYX31ZA42ZGGDgD4Iab75KMOXMdOR4aqlxCTb6FoLqqahzFTh6bMWtHEdqCz4uTVeHcH/FGUC/2j1BQE5FEKg3EIKl0uja5ztpSZa+3e59cmOHAPcyhlYE9ov+tU6GVzThHqBGs9Wd4zw6oNMvBt+YbbepNJotoU7YtuST1Z5mZIjpJaD+kDHqmmLyDYxlpWaHJFsPETkRsGj1Ko6lzgz1NYVMuejwOw2EwUtWQ+YKy7c3Y54dVk0hWD8oRaqOo8HNQ9YKURUjeIXXZ8OGst6WE5KtvoV/ga8VZQ8gE8SRc/XEWdXGrdDKc8tMxnVN03pSJQGIYquLQGU7QwUUftlJ6MYA8jgQFpGcW0FVBmsxl03zyxSL+FemGrtEoVwAOlfAiLaHuLV2QZ84j+dJAoWjdOFIF+uXwOzyeQNMPTwFg+ivSAkE9D23HFQJOnC34NYENFHBLCZfK+oICubzmXnFKHbLJrlNvlvbCONp+LiFK2iXMda3p8oGojI5o/92vlxF4mn5ZH4JZ8jRX6Xalj18Cw6H6j8UzO6w4cI5OV0RvFEKOwKmGvN/W7OvdHPMBMmg1oxFhAX6p8KdyULTdU+1C4JkX7mBND+Y5mjLv4/M3GIzyEcwyL6sxVTz0aqkKSCltyedUU/g9JmiuEp11d2Pk0skRo1o/gqPdJ5lbVG/fJXGcvxG6sIhAGcCOLIjHG873yWf2rJY7RRWk0W8lX5IjgvmDIWY9Tf8W8dNUWoRTbJ8IzAqL9YtYyOKDt4W8fdXKSRP+cljxQhmHmXTzyJ9mQkGpy0TWsf7VE96ki5aAhbRikjQ5mYN6xLyiLC1YKz8c/tZOb0bPH897bhFgjRHOtfzRbRm9p/Sqk4AMsStChqcVkZDM2bz3WOjNpBLI0/K8OCd+PDT+xg9ehjzBcM2WNjspKmch9rK6T58YRulEmbQbc9QT1+A2lPTnb2aXccptRrP+CwkQ2bsT/OMbUnE3NHvw0/G5Z3pSU0Qy6L10+lJ8SXzFGf4XTPoLuK+fNKj05IWFxJiHINtjo3WbwLdKZp8Kd97X+TW+z7XpP2qKqaRMfeYwzoc56y7w1NnOGzH48qicaC+DXipszT5mYmW6e1bxjwqNpo+E1JmXZQR/LeFi84XEGUYNxaaAciQfRX/6jO4b81TmdvWjyADWHwMonDXXHjO4YoSbh1M6pRKR2Psuw066/O/WvJh+WrIhlsJC6D9W2HtDK8gIU2F8SrpXOxd3hlntVFYsMo37s6kPAtFm2hu+eWN+NtX9/EO8psgAdiXvMNczCSFxV9cdEEXfDHHbQBmH/g+XilwtXYcjoZas9LqLS4xBSU4vLMnCqrtQ0qauh2g52wDFz6mAj7Z6OydXcVDwjK4QD2P2zfAYsfOqIhhg7xEzDJoumTy+eRbkGbFHraOet+LF5N8lKKplstYqiVamzJ56geEsZ6QP1NYv/KXdKk+OjtRC/KdoOZjrBXsoR8/CS8Az6JV/DyGqbTkwlo9gA5hnKaVKtRy9q7uNASl9asjj82WN/0VYIhMfLoR1CbW+vUrOSbAh/ilqbcq3HJ8c5+E2HuhKIbYRJRMQrfJrxKk7xKTRAgeSbA5dRzQACm31Ch2FSvoS5KnIpYXyqm4828lGGNApJiZ1aU0Q2mLUI/ZHAHrzMacshZtckhWG9n9MKIcDc8ld0gl7Tl5QFMOswgHvWyzuEqgTnuBxJqfhTprv6tbLJ4xcpNz2/v4fHE743YuVN5/lJG0SEfwUUq53MtXUqII9PRcjnTAN4TT3Y+cz6QWaW/l/tW0uSvniLha36gw3WlfA5qWdBuwE2uR0XMyYXE5d7WEkHUnAYzzJsRqrvhkqNwQO0V1jF14ApnUltMxqK3pbyWO3tw1o5+PIjcvKFeOFYCUucRa2lS0h4peA8FdiOcMkUabgHdtsAJuUrlxa+Vi39Y6PVg24XRyupLFIy80QmIF5H4GUY/aW5Ig687karDPyHVnr9M6PEJ3q3acV4yKwZSMBvlxqlvUFYgLm8NELucYtQvyI7CYRDl6LvSpdro+FK9IJSaOLXFghk90IlcJz4Ic74UY8a8+l+8tQKEjhVzFeYbLvrHGTv5A0OAs43fxIxAe5q/iqRFZUAXE+h0PUfky5af3xo/7zZXGhnzfz1Um8L58WUa5hTavUhbD0+zRqiajkJ7nyqIKj5b6nRTzHwG+lr7bxs5P5SPYycAoDdEqjT3TUqY3dz2tONxBh1lU7WX3BTxfO/WSqi0Zz+sEAOrvGu8io4SmIM4/Ka5RTXQscbG1I04g28x0fTm6KSXDFhAcNsNw0Mw8o2u5Lxa42szqPdapNqo6lrOP2N6RQ0pzOUJ6d/f/4Yqt1/r6XtoTqCPE70IwyZvaAWjqTX1XoLmvQ4uajXSpxDA84kZ1fFNd96Y892wh4ygX6RMg6vUd67kkRKcrmAckL8UmAklWAJryol61L8fPBt8o32hDuVCE2itZBjVn/4vEZVMARe0U7X/NOb6NDdrbP8TCM4g4+XeV7Jej+MnqvdA0c19fSUqxU1fhrSQL4cuNcdPKbdPSyPzptcmrxngxL9Yotv6/Ah2c4kL8dt1m7uQE8cdunn3qMB176itdJQu6lEF3p/gg/kuBO70VtY6gVISN1cNPnv8EiKYKzLhCf89np5f/fCDWOhciRKDwWRzULf3jZvHDJ8cd25p5JA3UppQIqy/8C9g6UrJwmYWZ8f8z0+sGCY25gGwsQs5UREaq9GQKE//vFneh09XAVdDhzDkqspkWjL6RmLDWdIpttc0N5NTdX2DdqR9JVikvEkg9OBHpYxkxYr0RQMp5bphj0ee6KsYcbZ4x06gbJFeGSgKZjuR4EpDJ8yPJXFFxldxmUtsrCMr/z9NA9olxU7+l4OD+dXd0AEAfMtpIK+g98cuLM0HNfslZ5/YgWBxFF2zmKJFunA9bb/agMyUR9AGAVr/HER9lxJEwdbwKtHQy9vwiMF8G+452JLK/t0/j0mvspENFA9z2ZJPL9jFbSRuF34ppQ3mV/E14IZeGP29NIv2uOHOxL1uzKwNydi1YbLIJRDE25zm0Zh/ulUBJWEnMqUfmzDqo1V8qy4VxfXeym4xccedSOiEyyLna/lP08giG6hUmQLxnvzrMHK2AEe+ggm3RGoS8Rown66LX+See1iohZqnbqxISRf6rNBpM45XPvxph3Q3pKcjDvoeq9eaUFSA92VfxpnVBO/tXtiQGBLYuBSZpqxTWd6G4RP/PFdrmUOhVkRsUXBufoj2MKSgNx6Ab+KMUg5qY52yrkYGKt8O6CubJt0/GJnIlCRODd3ZdcuCNaVWx2PN5+LK6Jy4jEFKtw/f+Ub+piXcpBL02TiO1SCI7qU0MznFxbs5CYrYOo5uQe/CaxWIN8Pq57WuPJ4UT+FHcRW6eiVYxa5hQTAf/ai3XsH5xP2LT/CWdWB175xA8uN8iZ6ai3yJysIENsHcRD6bpGEZ6gc+IIFu+JEhm4zMxIhu9CqjscKnyUIIzasUxdo2Ioa6hZaq4exO0dC/5gQbL4vR23nf5/PfxEzggWNQyDhM+UupTXtBIO2yqV6/wotUPibw5rOcqU+Amua0hAt+7RVXHwvfnFVfCo8E6mdD8wv8xSK2i1mElL9KiW/eVZWBRNE8gSBYQ8DpaNF193CPDyWKxPHz3Hg/aehKa5P4GPE7ugkqhjsYVMUo9Pvq7wXrjAs6U8EKDEh9zsRfFyg91RJaRSqSMNaUbuTkqKYq7KalV3WErKQRL6SxCZa3xGwJ8H5t5bYU+J3lCbtQjtDZ8O66PwKPPvyx1zuiiMjQcwv+JNGNIlFraoEgz5MlGkrBEgIRGXZDuS6ZVAa8L8lqE+/en4pHcj6HNlKtriDeosSDduttT+zi45k4bkgXWgO0a8d7gdqZ3UJR29T2KFIOSrm2Eqat9SF4S8lc33+LUUePfo82x/nQilk3+Eu+HhupyjfM5PGq1dglQ4wG/lJYazW0LlJ774pf/fwHYuPGjVC0CgsOjDzN8o2F6koQV+o90KCDPNkmqpGuAx8+43UGbtxxZGt0OpiFwi3tp8JyYExjdfni19OpI6SI48mM4pZCQXpkhvbZnbvD9hHigF+ERZJfzZZRGExPctz5QL8eQNAFI/KuL4DC23teZmSi1RNxU26PZTrfmtXwgciXXMyvm8j2ACq5n3+x4PyKdvh+SAVEvOQpc1SO7JDZf4+1L+fmB31RWMENRock5xOJ6H2UdMncn+nU9plECElvoLRnImET+mfWHT1fAfrR6iA1Yks9UXu3F2KHIc/wAeChopbz8RCkHQGxOQEVSbujBdd/Hjod1X8g4kF4MsefT+gd4n0UGoUgd30zeGmabC7h7W29PhizM8IZvfZbzVFdLPLU5X8s+wmdN65Woyld4B+BVEQ+w1GA4J4K6WVcSki7AeL4Gv6v3DXYBgdHl5aHXI1epDe0MxtdxvyPhHxoO3pHodmCkdJ1udrGu1167EDHXzknCB5r5U9cxI/UFt54Xxr5LPwrfONSxhMj3DqfGLSQQfxf2cSWWFig3jGf2mOfQ+XzH62mfn3Dv0KSS2M12rilop/c5iFK5ApaiFse2g== - </xenc:CipherValue> - </xenc:CipherData> - </xenc:EncryptedData> - </saml2:EncryptedAssertion> -</saml2p:Response> diff --git a/nachrichten-manager/src/test/resources/application-bayern.yaml b/nachrichten-manager/src/test/resources/application-bayern.yaml deleted file mode 100644 index 765940c40972f684097389caf6331114bfbdf1e0..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/resources/application-bayern.yaml +++ /dev/null @@ -1,15 +0,0 @@ -ozgcloud: - antragraum: - url: https://dev.antragsraum.de/ - entityId: https://antragsraum.ozgcloud.de/ - metadataUri: "classpath:/bayernid/metadata/bayernid-idp-infra.xml" - decryptionPrivateKey: "classpath:/bayernid/bayernid-test-enc.key" - decryptionCertificate: "classpath:/bayernid/bayernid-test-enc.crt" - nachrichten-manager: - url: static://localhost:9091 -grpc: - client: - info-manager: - address: static://localhost:9091 - server: - port: 9092 \ No newline at end of file diff --git a/nachrichten-manager/src/test/resources/application.yaml b/nachrichten-manager/src/test/resources/application.yaml deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/nachrichten-manager/src/test/resources/bayernid-idp-infra.xml b/nachrichten-manager/src/test/resources/bayernid-idp-infra.xml deleted file mode 100644 index ec1ed7ca7099b8be7a8cff7448a740f0b9404c34..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/resources/bayernid-idp-infra.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><md:EntitiesDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> - <md:EntityDescriptor entityID="https://infra-pre-id.bayernportal.de/idp"> - <md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> - <md:KeyDescriptor use="signing"> - <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> - <ds:X509Data> - <ds:X509Certificate>MIIFbzCCA1egAwIBAgIJAPdFXXarkBN2MA0GCSqGSIb3DQEBCwUAME4xCzAJBgNV - BAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVuMQ0wCwYD - VQQKDARBS0RCMQwwCgYDVQQLDANJRE0wHhcNMjAxMDI3MTMxODQxWhcNMjUxMDI2 - MTMxODQxWjBOMQswCQYDVQQGEwJERTEPMA0GA1UECAwGQmF5ZXJuMREwDwYDVQQH - DAhNdWVuY2hlbjENMAsGA1UECgwEQUtEQjEMMAoGA1UECwwDSURNMIICIjANBgkq - hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzDtWAEdC3J9FD+ti1exRhN1lzNgKWqO2 - gQNdJvlt7KGHA2VGGO7tqRogTuoqi/ydtiHJ8+lhp4kcWqyfv7i9HXOncvcsRRmR - dZjUY2Iui6ozJqD5LVm/vP5YfdP7vQPdbqyyfpoJhf3mbMEtdNDdGRnGIPUfDn+C - Fbo37f9tPwMgf3jgh4gxaujtLIhhr9gevVTEeZAFu9EvzLNd3kEtRb7MuXqIOdu1 - rW8HlGYFwwVLqEyBn8XG0QAIfhMmGjFMG7z+Kco2quwOmmZVzWQfeH/3AlN2KbcP - t7j+pl+6Bew2AAivP7O+95YKORqQjTu3rPWMF4txPId37MSjoytwBRyd5EACTvhQ - BOGrDFKQUOx6fTtRc8+7XGVz8MdQaZQWQXXh1ByU783twNdnRSrSVIyLdjiy1uCb - jvsSAtbzGBygPIvDo3skCNLNFXsChtHIfFFDK20KPGb0ghEDf2q3hDbFG3ZDGGyn - ZmJcZKuZhJqodJ/++sAXADyTJNAPVYDjKCF4ypELp2Eu/p1gaQPJEb74L/ZFZVOE - JFyXIiaqB9J+fcn/biqHHOmcCi8n9aIiNt1fatr1Z4lQRWoGtKaGU0+bzUSH4Bgs - 2EG4u1CI2MKDWqK2aEsHrtu8tbS9LrUmDVKtaEUOeul8xWVa036vp/YUIdiJNZSx - ZG4iTmSOATECAwEAAaNQME4wHQYDVR0OBBYEFFYeltslkaolOmcINXQeSe7nURwp - MB8GA1UdIwQYMBaAFFYeltslkaolOmcINXQeSe7nURwpMAwGA1UdEwQFMAMBAf8w - DQYJKoZIhvcNAQELBQADggIBAKqAlXoO41SAiycYUOrR90pfwTCysmbtHF5RWSCM - jF2aCG8URJ7bXwC0lBH8E5zCetFZwdqZziQtxzRkIOfhS5uWbH0RDhwuxZG+5RTP - yaHPAZI6e5xHDu8vHl/VbC3lnL/6K8l+Purr/yo8qkJqrPgThZRL9jBQyYRhDSsJ - UyIw5zcKKUQC/JWtMQAQcopbjekCs6xDT1HqIN90Sc/gOfYjNo0dGMNmro9mxcw8 - 2Iow18KNVdtEexfD+/6x4NPD61pzuQEe09TR+Cv3XyzBoGQ/2arijcPnGvth79ff - VFtRSf3fSs7wEKV9g3mEWXFDtPBhDj6K0kKU/kJfEZixkXl92MY+bmugrtTIrazj - tfrgMglIAHu9XCYWd/gef0J+PNfHsxgbTEr3XSC+5/xoFKPQSw3PgV8lkUDq4mJU - Ky/q4YmA37XQxourFR5pWvF03YACdtq6zPjtVeI7Cvkte6k0YW5S3cx9RmPv6YZh - laZ5ERpWNiv6IjokLsvNeemf2PApjO7Q2EDBIoHBYH31wwJSsyRDrSVmbaqLFI15 - fLXeh2A4YbaBDZdGvDiLOAk+dG1wdZ2aGw/uNBzMtc8VeKqI1HPcqIluBA3uUPpy - LLA+9hDPf6Pp4j0gkXxBikz+/h22bFxE1HmDiOSkEn+2NmOHuEFeA+D8jsCAL5VJ - 3emK</ds:X509Certificate> - </ds:X509Data> - </ds:KeyInfo> - </md:KeyDescriptor> - <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat> - <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://infra-pre-id.bayernportal.de/idp/profile/SAML2/POST/SSO"/> - <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://infra-pre-id.bayernportal.de/idp/profile/SAML2/Redirect/SSO"/> - </md:IDPSSODescriptor> - </md:EntityDescriptor> -</md:EntitiesDescriptor> \ No newline at end of file diff --git a/nachrichten-manager/src/test/resources/bayernid.p12 b/nachrichten-manager/src/test/resources/bayernid.p12 deleted file mode 100644 index fa82ce9007cc50831496073cdb03d8b6a92b5ee4..0000000000000000000000000000000000000000 Binary files a/nachrichten-manager/src/test/resources/bayernid.p12 and /dev/null differ diff --git a/nachrichten-manager/src/test/resources/junit-platform.properties b/nachrichten-manager/src/test/resources/junit-platform.properties deleted file mode 100644 index 1cebb76d5a58ac034b2627d12411d82d1e85821e..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/resources/junit-platform.properties +++ /dev/null @@ -1 +0,0 @@ -junit.jupiter.extensions.autodetection.enabled = true \ No newline at end of file diff --git a/nachrichten-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/nachrichten-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker deleted file mode 100644 index ca6ee9cea8ec189a088d50559325d4e84ff8ad09..0000000000000000000000000000000000000000 --- a/nachrichten-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +++ /dev/null @@ -1 +0,0 @@ -mock-maker-inline \ No newline at end of file diff --git a/notification-manager/lombok.config b/notification-manager/lombok.config deleted file mode 100644 index d07dd9b0e2b0281fbf514a968b9451cb6af62f93..0000000000000000000000000000000000000000 --- a/notification-manager/lombok.config +++ /dev/null @@ -1,30 +0,0 @@ -# -# Copyright (C) 2022 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. -# - -lombok.log.fieldName=LOG -lombok.log.slf4j.flagUsage = ERROR -lombok.log.log4j.flagUsage = ERROR -lombok.data.flagUsage = ERROR -lombok.nonNull.exceptionType = IllegalArgumentException -lombok.addLombokGeneratedAnnotation = true \ No newline at end of file diff --git a/notification-manager/pom.xml b/notification-manager/pom.xml deleted file mode 100644 index 1ef864cb4499d1c16cc77ef905d257937e4994a7..0000000000000000000000000000000000000000 --- a/notification-manager/pom.xml +++ /dev/null @@ -1,159 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - Copyright (C) 2022 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. - ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>de.ozgcloud.common</groupId> - <artifactId>ozgcloud-common-parent</artifactId> - <version>4.0.1-SNAPSHOT</version> - <relativePath/> - </parent> - - <groupId>de.ozgcloud.notification</groupId> - <artifactId>notification-manager</artifactId> - <version>2.6.0-SNAPSHOT</version> - <name>OZG-Cloud Notification Manager</name> - - <properties> - <user-manager-interface.version>2.0.0</user-manager-interface.version> - <ozgcloud.license.version>1.6.0</ozgcloud.license.version> - </properties> - - <dependencies> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-interface</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-utils</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>de.ozgcloud.command</groupId> - <artifactId>command-manager</artifactId> - <version>${project.version}</version> - </dependency> - - <dependency> - <groupId>de.ozgcloud.user</groupId> - <artifactId>user-manager-interface</artifactId> - <version>${user-manager-interface.version}</version> - <exclusions> - <exclusion> - <groupId>io.grpc</groupId> - <artifactId>grpc-core</artifactId> - </exclusion> - <exclusion> - <groupId>org.jboss.slf4j</groupId> - <artifactId>slf4j-jboss-logmanager</artifactId> - </exclusion> - </exclusions> - </dependency> - - - <!-- Spring --> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-context</artifactId> - </dependency> - - <dependency> - <groupId>net.devh</groupId> - <artifactId>grpc-client-spring-boot-starter</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-devtools</artifactId> - <scope>runtime</scope> - </dependency> - - <!-- tools --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - </dependency> - <dependency> - <groupId>commons-beanutils</groupId> - <artifactId>commons-beanutils</artifactId> - </dependency> - - <!-- Test --> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-utils</artifactId> - <version>${project.version}</version> - <type>test-jar</type> - <scope>test</scope> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - </plugin> - - <plugin> - <groupId>com.mycila</groupId> - <artifactId>license-maven-plugin</artifactId> - <configuration> - <mapping> - <config>SCRIPT_STYLE</config> - </mapping> - <licenseSets> - <licenseSet> - <header>license/eupl_v1_2_de/header.txt</header> - <excludes> - <exclude>**/README</exclude> - <exclude>src/test/resources/**</exclude> - <exclude>src/main/resources/**</exclude> - </excludes> - </licenseSet> - </licenseSets> - </configuration> - <dependencies> - <dependency> - <groupId>de.ozgcloud.common</groupId> - <artifactId>ozgcloud-common-license</artifactId> - <version>${ozgcloud.license.version}</version> - </dependency> - </dependencies> - </plugin> - </plugins> - </build> -</project> diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/NotificationManagerCallContextAttachingInterceptor.java b/notification-manager/src/main/java/de/ozgcloud/notification/NotificationManagerCallContextAttachingInterceptor.java deleted file mode 100644 index 5c95757fd8585ad442a672faaadde129545044d8..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/NotificationManagerCallContextAttachingInterceptor.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2022 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.notification; - -import static de.ozgcloud.common.grpc.GrpcUtil.*; - -import java.util.UUID; - -import io.grpc.CallOptions; -import io.grpc.Channel; -import io.grpc.ClientCall; -import io.grpc.ClientInterceptor; -import io.grpc.ForwardingClientCall.SimpleForwardingClientCall; -import io.grpc.Metadata; -import io.grpc.MethodDescriptor; - -public class NotificationManagerCallContextAttachingInterceptor implements ClientInterceptor { - - static final String KEY_USER_ID = "USER_ID-bin"; - static final String KEY_CLIENT_NAME = "CLIENT_NAME-bin"; - static final String KEY_REQUEST_ID = "REQUEST_ID-bin"; - - public static final String NOTIFICATION_MANAGER_CLIENT_NAME = "OzgCloud_NotificationManager"; - static final String NOTIFICATION_MANAGER_SENDER_USER_ID = "system-notification_manager-new_vorgang"; - - // <A> = Request, <B> = Response - @Override - public <A, B> ClientCall<A, B> interceptCall(MethodDescriptor<A, B> method, CallOptions callOptions, Channel next) { - return new CallContextAttachingClientCall<>(next.newCall(method, callOptions)); - } - - final class CallContextAttachingClientCall<A, B> extends SimpleForwardingClientCall<A, B> { - - protected CallContextAttachingClientCall(ClientCall<A, B> delegate) { - super(delegate); - } - - @Override - public void start(Listener<B> responseListener, Metadata headers) { - headers.merge(buildCallContextMetadata()); - super.start(responseListener, headers); - } - - private Metadata buildCallContextMetadata() { - var metadata = new Metadata(); - - metadata.put(createKeyOf(KEY_USER_ID), NOTIFICATION_MANAGER_SENDER_USER_ID.getBytes()); - metadata.put(createKeyOf(KEY_CLIENT_NAME), NOTIFICATION_MANAGER_CLIENT_NAME.getBytes()); - metadata.put(createKeyOf(KEY_REQUEST_ID), generateRequestId().getBytes()); - - return metadata; - } - - // TODO OZG-1974 requestId zentraler erzeugen - private String generateRequestId() { - return UUID.randomUUID().toString(); - } - - } - -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationEventListener.java b/notification-manager/src/main/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationEventListener.java deleted file mode 100644 index 49d2abcf96139ea72e26b77c2666bc612d8e38b7..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationEventListener.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.antragsteller; - -import java.util.Objects; -import java.util.Optional; -import java.util.function.Predicate; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Component; - -import de.ozgcloud.command.VorgangCreatedEvent; -import de.ozgcloud.notification.postfach.PostfachService; -import de.ozgcloud.notification.vorgang.Vorgang; -import de.ozgcloud.notification.vorgang.VorgangId; -import de.ozgcloud.notification.vorgang.VorgangService; -import lombok.extern.log4j.Log4j2; - -@Component -@Log4j2 -public class AntragstellerNotificationEventListener { - - static final String FS_FORMENGINE_NAME = "FormSolutions"; - static final String POSTFACH_NOT_CONFIGURED_MESSAGE = "Postfach is not configured. Antragsteller notifications will not be sent."; - private static final Predicate<Vorgang> EXISTS_POSTFACH_ID = vorgang -> StringUtils.isNoneBlank(vorgang.getPostfachId()); - private static final Predicate<Vorgang> EXISTS_POSTFACH_ADDRESS = vorgang -> Objects.nonNull(vorgang.getPostfachAddress()); - private static final Predicate<Vorgang> IS_FORMSOLUTIONS_FORM_ENGINE = vorgang -> StringUtils.equals(vorgang.getFormEngineName(), - FS_FORMENGINE_NAME); - private static final Predicate<Vorgang> SHOULD_SEND_NOTIFICATION = vorgang -> // - (EXISTS_POSTFACH_ID.test(vorgang) || EXISTS_POSTFACH_ADDRESS.test(vorgang)) && IS_FORMSOLUTIONS_FORM_ENGINE.test(vorgang); - - @Autowired - private AntragstellerNotificationService service; - @Autowired - private VorgangService vorgangService; - @Autowired - private PostfachService postfachService; - - private Optional<Boolean> isPostfachConfigured = Optional.empty(); - - @EventListener - public void onVorgangCreated(VorgangCreatedEvent event) { - if (isPostfachConfigured()) { - sendIfRequired(vorgangService.getVorgang(VorgangId.from(event.getSource()))); - } else { - LOG.debug(POSTFACH_NOT_CONFIGURED_MESSAGE); - } - } - - boolean isPostfachConfigured() { - return isPostfachConfigured.orElseGet(this::fetchIsPostfachConfigured); - } - - synchronized boolean fetchIsPostfachConfigured() { - return isPostfachConfigured.orElseGet(() -> { - var isConfigured = postfachService.isPostfachConfigured(); - if (!isConfigured) { - LOG.warn(POSTFACH_NOT_CONFIGURED_MESSAGE); - } - isPostfachConfigured = Optional.of(isConfigured); - return isConfigured; - }); - } - - private void sendIfRequired(Vorgang vorgang) { - if (SHOULD_SEND_NOTIFICATION.test(vorgang)) { - service.sendNotification(vorgang); - } - } -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationService.java b/notification-manager/src/main/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationService.java deleted file mode 100644 index 7c15e2129f61532d4bf53b33b545a9ec3eebb6ea..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationService.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.antragsteller; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.util.Objects; - -import org.apache.commons.io.IOUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.notification.command.CommandService; -import de.ozgcloud.notification.postfach.PostfachNachricht; -import de.ozgcloud.notification.vorgang.Vorgang; - -@Service -class AntragstellerNotificationService { - - private static final String TEMPLATE_FILE = "antragsteller.notificationTemplate.txt"; - private static final String SUBJECT_TEMPLATE = "Eingangsbestätigung %s"; - - private static final String TIMEZONE = "Europe/Berlin"; - private static final String DATETIME_FORMAT = "dd.MM.yyyy HH:mm:ss"; - - @Autowired - private CommandService commandService; - - public void sendNotification(Vorgang vorgang) { - commandService.createSendPostfachNachrichtCommand(buildPostfachNachricht(vorgang)); - } - - PostfachNachricht buildPostfachNachricht(Vorgang vorgang) { - return PostfachNachricht.builder() - .vorgangId(vorgang.getId()) - .postfachId(vorgang.getPostfachId()) - .postfachAddress(vorgang.getPostfachAddress()) - .mailBody(formatMessage(vorgang)) - .subject(formatSubject(vorgang)) - .build(); - } - - String formatMessage(Vorgang vorgang) { - return String.format(loadTemplate(), - vorgang.getCreatedAt().withZoneSameInstant(ZoneId.of(TIMEZONE)).format(DateTimeFormatter.ofPattern(DATETIME_FORMAT)), - vorgang.getVorgangNummer()); - } - - private String loadTemplate() { - var templateInStream = AntragstellerNotificationService.class.getClassLoader().getResourceAsStream(TEMPLATE_FILE); - if (Objects.isNull(templateInStream)) { - throw new TechnicalException("Cannot find template file " + TEMPLATE_FILE); - } - try { - return IOUtils.toString(templateInStream, StandardCharsets.UTF_8); - } catch (IOException e) { - throw new TechnicalException("Error reading template file", e); - } - } - - String formatSubject(Vorgang vorgang) { - return String.format(SUBJECT_TEMPLATE, vorgang.getVorgangName()); - } -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/command/Command.java b/notification-manager/src/main/java/de/ozgcloud/notification/command/Command.java deleted file mode 100644 index 113cedcb06b34e6f26a20cbc589c6424198434bf..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/command/Command.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.command; - -import java.util.Map; - -import de.ozgcloud.notification.vorgang.VorgangId; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -class Command { - - enum CommandOrder { - SEND_POSTFACH_NACHRICHT - } - - private VorgangId vorgangId; - private String relationId; - private CommandOrder order; - - private Map<String, Object> body; -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandBody.java b/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandBody.java deleted file mode 100644 index 345a447925a1e43b828a6b04093e961428943341..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandBody.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.command; - -public interface CommandBody { - -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandMapper.java b/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandMapper.java deleted file mode 100644 index 026e16e27d5f477976b3942ad9ddf0aa3882ee3e..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandMapper.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.command; - -import java.util.Optional; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -import de.ozgcloud.notification.vorgang.VorgangId; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest; - -@Mapper(uses = GrpcObjectMapper.class) -interface CommandMapper { - - @Mapping(target = "mergeFrom", ignore = true) - @Mapping(target = "clearField", ignore = true) - @Mapping(target = "clearOneof", ignore = true) - @Mapping(target = "mergeBodyObj", ignore = true) - @Mapping(target = "mergeCallContext", ignore = true) - @Mapping(target = "mergeRedirectRequest", ignore = true) - @Mapping(target = "mergeUnknownFields", ignore = true) - @Mapping(target = "removeBody", ignore = true) - @Mapping(target = "callContext", ignore = true) - @Mapping(target = "orderStringBytes", ignore = true) - @Mapping(target = "order", ignore = true) - @Mapping(target = "orderValue", ignore = true) - @Mapping(target = "redirectRequest", ignore = true) - @Mapping(target = "relationIdBytes", ignore = true) - @Mapping(target = "relationVersion", ignore = true) - @Mapping(target = "unknownFields", ignore = true) - @Mapping(target = "vorgangIdBytes", ignore = true) - @Mapping(target = "allFields", ignore = true) - @Mapping(target = "bodyBuilderList", ignore = true) - @Mapping(target = "bodyList", ignore = true) - @Mapping(target = "bodyOrBuilderList", ignore = true) - - @Mapping(target = "bodyObj", source = "body") - @Mapping(target = "orderString", source = "order") - GrpcCreateCommandRequest toGrpcRequest(Command command); - - default String toString(VorgangId vorgangId) { - return Optional.ofNullable(vorgangId) - .map(VorgangId::toString) - .orElse(null); - } -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandRemoteService.java b/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandRemoteService.java deleted file mode 100644 index 21bfd4983be83641f5abd667bdf2b875dd03dceb..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandRemoteService.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.command; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc.CommandServiceBlockingStub; -import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class CommandRemoteService { - - @GrpcClient("pluto") - private CommandServiceBlockingStub stub; - @Autowired - private CommandMapper mapper; - - public void createCommand(Command command) { - stub.withInterceptors(new NotificationManagerCallContextAttachingInterceptor()).createCommand(mapper.toGrpcRequest(command)); - } - -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandService.java b/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandService.java deleted file mode 100644 index 953b00a7477defc78b77979b4a9ce604ac202dbc..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandService.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.command; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; -import java.util.function.Predicate; - -import org.apache.commons.beanutils.BeanMap; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.notification.command.Command.CommandOrder; -import de.ozgcloud.notification.postfach.PostfachAddress; -import de.ozgcloud.notification.postfach.PostfachAddressIdentifier; -import de.ozgcloud.notification.postfach.PostfachNachricht; -import de.ozgcloud.notification.postfach.StringBasedIdentifier; - -@Service("notificationCommandService") -public class CommandService { - - private static final Predicate<Entry<Object, Object>> IS_NOT_CLASS_KEY = entry -> !StringUtils.equals(entry.getKey().toString(), "class"); - - @Autowired - private CommandRemoteService commandRemoteService; - - public void createSendPostfachNachrichtCommand(PostfachNachricht nachricht) { - commandRemoteService.createCommand(buildCommand(nachricht)); - } - - Command buildCommand(PostfachNachricht nachricht) { - return Command.builder() - .vorgangId(nachricht.getVorgangId()) - .relationId(nachricht.getVorgangId().toString()) - .order(CommandOrder.SEND_POSTFACH_NACHRICHT) - .body(toMap(nachricht)) - .build(); - } - - Map<String, Object> toMap(PostfachNachricht nachricht) { - var result = new HashMap<String, Object>(); - - new BeanMap(nachricht).entrySet().stream() - .filter(entry -> Objects.nonNull(entry.getValue())) - .filter(IS_NOT_CLASS_KEY) - .forEach(entry -> result.put(entry.getKey().toString(), getValue(entry.getValue()))); - - return Collections.unmodifiableMap(result); - } - - private Object getValue(Object value) { - if (value instanceof PostfachAddress postfachAddress) { - return buildPostfachAddressMap(postfachAddress); - } - return value; - } - - private Map<String, Object> buildPostfachAddressMap(PostfachAddress postfachAddress){ - return Map.of(PostfachAddress.TYPE_FIELD, postfachAddress.getType(), - PostfachAddress.VERSION_FIELD, postfachAddress.getVersion(), - PostfachAddress.IDENTIFIER_FIELD, buildPostfachAddressIdentifierMap(postfachAddress.getIdentifier())); - } - - private Map<String, Object> buildPostfachAddressIdentifierMap(PostfachAddressIdentifier identifier){ - return Map.of(StringBasedIdentifier.POSTFACH_ID_FIELD, ((StringBasedIdentifier) identifier).getPostfachId()); - } -} \ No newline at end of file diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/email/EmailRecipientMapper.java b/notification-manager/src/main/java/de/ozgcloud/notification/email/EmailRecipientMapper.java deleted file mode 100644 index a30a2d2778116564f8372947aa96f105a238c667..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/email/EmailRecipientMapper.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.email; - -import de.ozgcloud.nachrichten.email.GrpcRecipient; -import de.ozgcloud.notification.user.Recipient; - -import org.mapstruct.Mapper; - -@Mapper -interface EmailRecipientMapper { - - GrpcRecipient toGrpc(Recipient recipient); - -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/email/EmailRemoteService.java b/notification-manager/src/main/java/de/ozgcloud/notification/email/EmailRemoteService.java deleted file mode 100644 index 55c4423fbb7735b4f8610be71b67f0feac987020..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/email/EmailRemoteService.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.email; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.nachrichten.email.EmailServiceGrpc.EmailServiceBlockingStub; -import de.ozgcloud.nachrichten.email.GrpcRecipient; -import de.ozgcloud.nachrichten.email.GrpcSendEmailRequest; -import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor; -import lombok.NonNull; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -public class EmailRemoteService { - - @GrpcClient("email") - private EmailServiceBlockingStub emailServiceStub; - - @Autowired - private EmailRecipientMapper recipientMapper; - - public void sendEmail(@NonNull UserEmail email) { - var grpcEmailRecipients = email.recipients().stream().map(recipientMapper::toGrpc).toList(); - emailServiceStub.withInterceptors(new NotificationManagerCallContextAttachingInterceptor()) - .sendEmail(buildRequest(grpcEmailRecipients, email.subject(), email.body())); - } - - private GrpcSendEmailRequest buildRequest(List<GrpcRecipient> grpcRecipients, String subject, String body) { - return GrpcSendEmailRequest.newBuilder().addAllRecipients(grpcRecipients).setSubject(subject).setBody(body).build(); - } -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/email/UserEmail.java b/notification-manager/src/main/java/de/ozgcloud/notification/email/UserEmail.java deleted file mode 100644 index 8410d7a79c8e5353e68a198d071db98bc8d07f90..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/email/UserEmail.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.email; - -import de.ozgcloud.notification.user.Recipient; -import lombok.Builder; -import lombok.Singular; - -import java.util.List; - -@Builder -public record UserEmail(@Singular List<Recipient> recipients, String subject, String body) { -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachAddress.java b/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachAddress.java deleted file mode 100644 index d7fe49e360c27eb2538303a0eae6cbe85c48d456..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachAddress.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.ozgcloud.notification.postfach; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class PostfachAddress { - - public static final String VERSION_FIELD = "version"; - public static final String TYPE_FIELD = "type"; - public static final String IDENTIFIER_FIELD = "identifier"; - - private String version; - private int type; - private PostfachAddressIdentifier identifier; -} \ No newline at end of file diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachAddressIdentifier.java b/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachAddressIdentifier.java deleted file mode 100644 index 3cb1eb983ef49d4268873d924e5416fc35eb4d84..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachAddressIdentifier.java +++ /dev/null @@ -1,5 +0,0 @@ -package de.ozgcloud.notification.postfach; - -public interface PostfachAddressIdentifier { - -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachNachricht.java b/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachNachricht.java deleted file mode 100644 index f710e79ca547a53478711daaa00d3209d4aa3312..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachNachricht.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.postfach; - -import de.ozgcloud.notification.command.CommandBody; -import de.ozgcloud.notification.vorgang.VorgangId; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class PostfachNachricht implements CommandBody { - - static final String FIELD_VORGANG_ID = "vorgangId"; - static final String FIELD_POSTFACH_ID = "postfachId"; - public static final String FIELD_POSTFACH_ADDRESS = "postfachAddress"; - static final String FIELD_SUBJECT = "subject"; - static final String FIELD_MESSAGE = "mailBody"; - - static final String FIELD_REPLY_OPTION = "replyOption"; - static final String DEFAULT_REPLY_OPTION = "FORBIDDEN"; - - private VorgangId vorgangId; - private String postfachId; - private PostfachAddress postfachAddress; - - private String subject; - private String mailBody; - - public String getReplyOption() { - return DEFAULT_REPLY_OPTION; - } - -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachRemoteService.java b/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachRemoteService.java deleted file mode 100644 index dcbdca72ee0c5f07f2da1885608e7989db7240e4..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachRemoteService.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2023 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.notification.postfach; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.nachrichten.postfach.GrpcIsPostfachConfiguredRequest; -import de.ozgcloud.nachrichten.postfach.PostfachServiceGrpc.PostfachServiceBlockingStub; -import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class PostfachRemoteService { - - @GrpcClient("pluto") - private PostfachServiceBlockingStub postfachServiceBlockingStub; - - public boolean isPostfachConfigured() { - return getPostfachServiceStub().isPostfachConfigured(buildGrpcRequest()).getIsConfigured(); - } - - GrpcIsPostfachConfiguredRequest buildGrpcRequest() { - return GrpcIsPostfachConfiguredRequest.newBuilder().build(); - } - - PostfachServiceBlockingStub getPostfachServiceStub() { - return postfachServiceBlockingStub.withInterceptors(new NotificationManagerCallContextAttachingInterceptor()); - } -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachService.java b/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachService.java deleted file mode 100644 index 750c96894ae3f4125d8d17fdefe35cadcf36513f..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachService.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2023 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.notification.postfach; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service("notificationPostfachService") -public class PostfachService { - - @Autowired - private PostfachRemoteService postfachRemoteService; - - public boolean isPostfachConfigured() { - return postfachRemoteService.isPostfachConfigured(); - } -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/StringBasedIdentifier.java b/notification-manager/src/main/java/de/ozgcloud/notification/postfach/StringBasedIdentifier.java deleted file mode 100644 index 499ad64f64e3e223543a732b73998c96116817e5..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/StringBasedIdentifier.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.ozgcloud.notification.postfach; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class StringBasedIdentifier implements PostfachAddressIdentifier { - - public static final String POSTFACH_ID_FIELD = "postfachId"; - - private String postfachId; - -} \ No newline at end of file diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/user/Recipient.java b/notification-manager/src/main/java/de/ozgcloud/notification/user/Recipient.java deleted file mode 100644 index b6dde90cfb54ad064efbbe78fa21caf43ea0db3a..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/user/Recipient.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.user; - -import lombok.Builder; - -@Builder -public record Recipient(String firstName, String lastName, String email) { -} \ No newline at end of file diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserNotificationEventListener.java b/notification-manager/src/main/java/de/ozgcloud/notification/user/UserNotificationEventListener.java deleted file mode 100644 index 822680b504116642384a95bd03621d6665b348f9..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserNotificationEventListener.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.user; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Component; - -import de.ozgcloud.command.VorgangCreatedEvent; -import de.ozgcloud.notification.vorgang.VorgangId; -import de.ozgcloud.notification.vorgang.VorgangService; - -@Component -public class UserNotificationEventListener { - - @Autowired - private UserNotificationService userNotificationService; - - @Autowired - private VorgangService vorgangService; - - @EventListener - public void onVorgangCreated(VorgangCreatedEvent event) { - userNotificationService.sendNotification(vorgangService.getVorgang(VorgangId.from(event.getSource()))); - } -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserNotificationService.java b/notification-manager/src/main/java/de/ozgcloud/notification/user/UserNotificationService.java deleted file mode 100644 index e9f02888862d5ec80be071c362b75a15c95be9b3..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserNotificationService.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.user; - -import static java.util.Objects.*; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -import de.ozgcloud.notification.email.EmailRemoteService; -import de.ozgcloud.notification.email.UserEmail; -import de.ozgcloud.notification.vorgang.Vorgang; -import lombok.NonNull; - -@Service -public class UserNotificationService { - - public static final String MAIL_SUBJECT_TEMPLATE = "Neuer Vorgang: %s"; - public static final String MAIL_BODY = "Es ist ein neuer Vorgang im Allgemeinen Fachverfahren eingegangen."; - - @Autowired - private EmailRemoteService emailRemoteService; - - @Autowired - private UserRemoteService userRemoteService; - - @Async - public void sendNotification(@NonNull Vorgang vorgang) { - if (nonNull(vorgang.getOrganisationseinheitenId())) { - var recipients = userRemoteService.getRecipients(vorgang.getOrganisationseinheitenId()); - emailRemoteService.sendEmail(buildUserEmail(recipients, MAIL_SUBJECT_TEMPLATE.formatted(vorgang.getVorgangName()))); - } - } - - UserEmail buildUserEmail(List<Recipient> recipients, String subject) { - return UserEmail.builder().recipients(recipients).subject(subject).body(MAIL_BODY).build(); - } -} \ No newline at end of file diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserRecipientMapper.java b/notification-manager/src/main/java/de/ozgcloud/notification/user/UserRecipientMapper.java deleted file mode 100644 index fd0bdd0dd270d4828274715442b60f4fbdfa486d..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserRecipientMapper.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.user; - -import org.mapstruct.Mapper; - -import de.ozgcloud.user.recipient.GrpcRecipient; - -@Mapper -interface UserRecipientMapper { - - Recipient fromGrpc(GrpcRecipient grpcRecipient); -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserRemoteService.java b/notification-manager/src/main/java/de/ozgcloud/notification/user/UserRemoteService.java deleted file mode 100644 index 95f934e3d6db814a66f7b0d313208e2152b59003..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserRemoteService.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.user; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor; -import de.ozgcloud.user.grpc.recipient.GrpcFindRecipientRequest; -import de.ozgcloud.user.grpc.recipient.RecipientServiceGrpc; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -public class UserRemoteService { - - @GrpcClient("user-manager") - private RecipientServiceGrpc.RecipientServiceBlockingStub stub; - @Autowired - private UserRecipientMapper mapper; - - public List<Recipient> getRecipients(String organisationseinheitId) { - var request = GrpcFindRecipientRequest.newBuilder().setOrganisationsEinheitId(organisationseinheitId).build(); - return stub.withInterceptors(new NotificationManagerCallContextAttachingInterceptor()) - .findRecipientByOrganisationsEinheitId(request).getRecipientList().stream().map(mapper::fromGrpc).toList(); - } -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/Vorgang.java b/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/Vorgang.java deleted file mode 100644 index 63ddbbb7d3cf84b139e36d5c5333243321b51291..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/Vorgang.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.vorgang; - -import java.time.ZonedDateTime; - -import de.ozgcloud.notification.postfach.PostfachAddress; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder(toBuilder = true) -public class Vorgang { - - private VorgangId id; - - private ZonedDateTime createdAt; - - private String vorgangName; - private String vorgangNummer; - - private String postfachId; - private String formEngineName; - private String organisationseinheitenId; - - private PostfachAddress postfachAddress; -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangId.java b/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangId.java deleted file mode 100644 index e3c50bbd606c952b3d3eefadebfef0148e0a995c..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangId.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.vorgang; - -import de.ozgcloud.common.datatype.StringBasedValue; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -public class VorgangId extends StringBasedValue { - - VorgangId(String vorgangId) { - super(vorgangId); - } - - public static VorgangId from(String vorgangId) { - return new VorgangId(vorgangId); - } -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangMapper.java b/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangMapper.java deleted file mode 100644 index e20a60f402c5197a861a4d25d1dfe029a29da23c..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangMapper.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.vorgang; - -import java.util.Optional; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.NullValuePropertyMappingStrategy; - -import de.ozgcloud.notification.postfach.PostfachAddress; -import de.ozgcloud.notification.postfach.PostfachAddressIdentifier; -import de.ozgcloud.notification.postfach.StringBasedIdentifier; -import de.ozgcloud.vorgang.common.GrpcObject; -import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress; -import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto; -import de.ozgcloud.vorgang.vorgang.GrpcVorgangHead; -import de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang; - -@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_NULL, - nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) -interface VorgangMapper { - - @Mapping(target = "postfachId", source = "eingang.antragsteller.postfachId") - @Mapping(target = "vorgangName", source = "name") - @Mapping(target = "vorgangNummer", source = "nummer") - @Mapping(target = "organisationseinheitenId", source = "eingang.zustaendigeStelle.organisationseinheitenId") - @Mapping(target = "postfachAddress", expression = "java(fromPostfachAddress(vorgang))") - Vorgang fromGrpc(GrpcVorgangWithEingang vorgang); - - default PostfachAddress fromPostfachAddress(GrpcVorgangWithEingang vorgang) { - return Optional.ofNullable(vorgang.getHeader()) - .map(GrpcVorgangHead::getServiceKonto) - .map(GrpcServiceKonto::getPostfachAddressesList) - .filter(list -> !list.isEmpty()) - .map(list -> list.get(0)) - .map(this::buildPostfachAddress) - .orElse(null); - } - - private PostfachAddress buildPostfachAddress(GrpcPostfachAddress postfachAddress) { - return PostfachAddress.builder() - .type(postfachAddress.getType()) - .version(postfachAddress.getVersion()) - .identifier(buildIdentifier(postfachAddress.getIdentifier())) - .build(); - } - - private PostfachAddressIdentifier buildIdentifier(GrpcObject identifier) { - var postfachId = identifier.getProperty(0).getValue(0); - return StringBasedIdentifier.builder().postfachId(postfachId).build(); - } - - default VorgangId fromString(String vorgangId) { - return Optional.ofNullable(vorgangId).map(VorgangId::from).orElse(null); - } -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangRemoteService.java b/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangRemoteService.java deleted file mode 100644 index a93e799cd58fe017bd1f462f9d0d13f594fe3e3c..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangRemoteService.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.vorgang; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor; -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest; -import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class VorgangRemoteService { - - @GrpcClient("vorgang-manager") - private VorgangServiceBlockingStub stub; - - @Autowired - private VorgangMapper mapper; - - public Vorgang getVorgang(VorgangId vorgangId) { - return mapper.fromGrpc(stub.withInterceptors(new NotificationManagerCallContextAttachingInterceptor()) - .findVorgangWithEingang(buildRequest(vorgangId)).getVorgangWithEingang()); - } - - private GrpcFindVorgangWithEingangRequest buildRequest(VorgangId vorgangId) { - return GrpcFindVorgangWithEingangRequest.newBuilder() - .setId(vorgangId.toString()) - .build(); - } -} diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangService.java b/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangService.java deleted file mode 100644 index 07e144cc36e72253ee6c123a8a7823ffb049e30a..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangService.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.vorgang; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service("notificationVorgangService") -public class VorgangService { - - @Autowired - private VorgangRemoteService remoteService; - - public Vorgang getVorgang(VorgangId id) { - return remoteService.getVorgang(id); - } - -} diff --git a/notification-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/notification-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 08abec6c597ed602bc6a36d5de3111b9a0d66a74..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1,20 +0,0 @@ -net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcClientMetricAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcClientHealthAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcClientSecurityAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcClientTraceAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcDiscoveryClientAutoConfiguration -net.devh.boot.grpc.common.autoconfigure.GrpcCommonCodecAutoConfiguration -net.devh.boot.grpc.common.autoconfigure.GrpcCommonTraceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcAdviceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcHealthServiceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataConsulConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataEurekaConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataNacosConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataZookeeperConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcReflectionServiceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerFactoryAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerMetricAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerSecurityAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerTraceAutoConfiguration diff --git a/notification-manager/src/main/resources/antragsteller.notificationTemplate.txt b/notification-manager/src/main/resources/antragsteller.notificationTemplate.txt deleted file mode 100644 index b0a386d8b956bf5a7e918f32aa6e8df0e23492d8..0000000000000000000000000000000000000000 --- a/notification-manager/src/main/resources/antragsteller.notificationTemplate.txt +++ /dev/null @@ -1,11 +0,0 @@ -Sehr geehrte/r Antragstellende/r, - -Ihr Antrag ist bei uns zum Zeitpunkt %s eingegangen und wurde an die zuständige Stelle gesendet. -Die Vorgangsnummer lautet %s. - -Bitte geben Sie diese Vorgangsnummer bei allen Anfragen zu Ihrem Antrag an. - -Mit freundlichen Grüßen, -Ihre Online-Behörde. - -Diese E-Mail wurde automatisch generiert. Bitte antworten Sie nicht auf diese E-Mail. \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/NotificationManagerCallContextAttachingInterceptorTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/NotificationManagerCallContextAttachingInterceptorTest.java deleted file mode 100644 index 7c28db1270edac0fde4eca40fa61b92a672e8f53..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/NotificationManagerCallContextAttachingInterceptorTest.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2022 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.notification; - -import static de.ozgcloud.common.grpc.GrpcUtil.*; -import static de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor.*; -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.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import io.grpc.CallOptions; -import io.grpc.Channel; -import io.grpc.ClientCall; -import io.grpc.Metadata; -import io.grpc.MethodDescriptor; - -class NotificationManagerCallContextAttachingInterceptorTest { - - @InjectMocks - private NotificationManagerCallContextAttachingInterceptor interceptor; - - @Nested - class TestInterceptCall<A, B> { - - @Mock - private MethodDescriptor<A, B> method; - @Mock - private CallOptions callOptions; - @Mock - private Channel next; - @Mock - private ClientCall<Object, Object> nextCall; - - @Mock - private ClientCall.Listener<B> listener; - @Mock - private Metadata headers; - @Captor - private ArgumentCaptor<Metadata> metadataCaptor; - - @BeforeEach - void initMocks() { - when(next.newCall(any(), any())).thenReturn(nextCall); - } - - @Test - void shouldAddUserId() { - var addedMetadata = interceptCall(); - - assertThat(addedMetadata.get(createKeyOf(KEY_USER_ID))).isEqualTo(NOTIFICATION_MANAGER_SENDER_USER_ID.getBytes()); - } - - @Test - void shouldAddClientName() { - var addedMetadata = interceptCall(); - - assertThat(addedMetadata.get(createKeyOf(KEY_CLIENT_NAME))).isEqualTo(NOTIFICATION_MANAGER_CLIENT_NAME.getBytes()); - } - - @Test - void shouldAddRequestId() { - var addedMetadata = interceptCall(); - - assertThat(addedMetadata.get(createKeyOf(KEY_REQUEST_ID))).isNotNull(); - } - - private Metadata interceptCall() { - var call = interceptor.interceptCall(method, callOptions, next); - - call.start(listener, headers); - - verify(headers).merge(metadataCaptor.capture()); - return metadataCaptor.getValue(); - } - } - -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationEventListenerTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationEventListenerTest.java deleted file mode 100644 index e404877af9ef038cac013fe70a5640fc2a45f9eb..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationEventListenerTest.java +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.antragsteller; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.Executors; -import java.util.stream.IntStream; - -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.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.command.VorgangCreatedEvent; -import de.ozgcloud.notification.postfach.PostfachService; -import de.ozgcloud.notification.vorgang.Vorgang; -import de.ozgcloud.notification.vorgang.VorgangService; -import de.ozgcloud.notification.vorgang.VorgangTestFactory; -import lombok.SneakyThrows; - -class AntragstellerNotificationEventListenerTest { - - @Spy - @InjectMocks - private AntragstellerNotificationEventListener eventListener; - - @Mock - private AntragstellerNotificationService service; - @Mock - private VorgangService vorgangService; - @Mock - private PostfachService postfachService; - - @DisplayName("On vorgang created") - @Nested - class TestOnVorgangCreated { - - private static final VorgangCreatedEvent EVENT = new VorgangCreatedEvent(VorgangTestFactory.ID.toString()); - private static final Vorgang VORGANG = VorgangTestFactory.createBuilder() - .formEngineName(AntragstellerNotificationEventListener.FS_FORMENGINE_NAME).build(); - - @Test - void shouldLoadVorgang() { - when(postfachService.isPostfachConfigured()).thenReturn(true); - when(vorgangService.getVorgang(any())).thenReturn(VORGANG); - - onVorgangCreated(); - - verify(vorgangService).getVorgang(VorgangTestFactory.ID); - } - - @DisplayName("should not send notification when postfach is not configured") - @Test - void shouldNotSend() { - when(postfachService.isPostfachConfigured()).thenReturn(false); - - onVorgangCreated(); - - verify(vorgangService, never()).getVorgang(any()); - } - - @Nested - class TestIsPostfachConfigured { - - @Test - void shouldCallFetchIsPostfachService() { - eventListener.isPostfachConfigured(); - - verify(eventListener).fetchIsPostfachConfigured(); - } - - @Test - void shouldNotCallFetchIsPostfachService() { - ReflectionTestUtils.setField(eventListener, "isPostfachConfigured", Optional.of(true)); - - eventListener.isPostfachConfigured(); - - verify(eventListener, never()).fetchIsPostfachConfigured(); - } - - @Test - void shouldReturnValue() { - when(postfachService.isPostfachConfigured()).thenReturn(true); - - var isConfigured = eventListener.isPostfachConfigured(); - - assertThat(isConfigured).isTrue(); - } - - } - - @Nested - class TestFetchIsPostfachConfigured { - - @Test - void shouldCallRemoteService() { - eventListener.fetchIsPostfachConfigured(); - - verify(postfachService).isPostfachConfigured(); - } - - @Test - void shouldReturnValue() { - when(postfachService.isPostfachConfigured()).thenReturn(true); - - var isConfigured = eventListener.fetchIsPostfachConfigured(); - - assertThat(isConfigured).isTrue(); - } - - @Test - void shouldCallIsPostfachConfiguredOnce() { - fetchIsPostfachConfigured(); - - verify(postfachService).isPostfachConfigured(); - } - - @SneakyThrows - private void fetchIsPostfachConfigured() { - var executorService = Executors.newFixedThreadPool(5); - var countDownLatch = new CountDownLatch(3); - - IntStream.range(0, 3).forEach(i -> - executorService.submit(() -> { - eventListener.fetchIsPostfachConfigured(); - countDownLatch.countDown(); - }) - ); - - countDownLatch.await(); - } - } - - @DisplayName("send if required") - @Nested - class TestSendIfRequirest { - - @DisplayName("should not call service") - @Nested - class TestNotCallService { - - @BeforeEach - void setup() { - when(postfachService.isPostfachConfigured()).thenReturn(true); - } - - @Test - void onMissingPostfachIdAndPostfachAddress() { - when(vorgangService.getVorgang(any())).thenReturn(VORGANG.toBuilder().postfachId(null).postfachAddress(null).build()); - - onVorgangCreated(); - - verify(service, never()).sendNotification(any()); - } - - @Test - void forOtherThanFormSolutionsEngines() { - when(vorgangService.getVorgang(any())).thenReturn(VorgangTestFactory.createBuilder().formEngineName("other").build()); - - onVorgangCreated(); - - verify(service, never()).sendNotification(any()); - } - } - - @DisplayName("should call service") - @Nested - class TestCallService { - - @BeforeEach - void setup() { - when(postfachService.isPostfachConfigured()).thenReturn(true); - } - - @Test - void onExistingPostfachIdAndPostfachAddress() { - when(vorgangService.getVorgang(any())).thenReturn(VORGANG); - - onVorgangCreated(); - - verify(service).sendNotification(same(VORGANG)); - } - - @Test - void onExistingPostfachIdAndMissingPostfachAddress() { - when(vorgangService.getVorgang(any())).thenReturn(VORGANG.toBuilder().postfachAddress(null).build()); - - onVorgangCreated(); - - verify(service).sendNotification(any()); - } - - @Test - void onMissingPostfachIdAndExistingPostfachAddress() { - when(vorgangService.getVorgang(any())).thenReturn(VORGANG.toBuilder().postfachId(null).build()); - - onVorgangCreated(); - - verify(service).sendNotification(any()); - } - } - } - - private void onVorgangCreated() { - eventListener.onVorgangCreated(EVENT); - } - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationServiceTest.java deleted file mode 100644 index 429e4e47b0968cc2a0d05b772770c90c86bbc261..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationServiceTest.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.antragsteller; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; - -import org.junit.jupiter.api.DisplayName; -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 de.ozgcloud.notification.command.CommandService; -import de.ozgcloud.notification.postfach.PostfachAddressTestFactory; -import de.ozgcloud.notification.postfach.PostfachNachricht; -import de.ozgcloud.notification.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.notification.vorgang.VorgangTestFactory; - -class AntragstellerNotificationServiceTest { - - @Spy - @InjectMocks - private AntragstellerNotificationService service; - @Mock - private CommandService commandService; - - @Captor - private ArgumentCaptor<PostfachNachricht> nachrichtCaptor; - - @DisplayName("Send notification") - @Nested - class TestSendNotification { - - @Test - void shouldCallCommandService() { - service.sendNotification(VorgangTestFactory.create()); - - verify(commandService).createSendPostfachNachrichtCommand(nachrichtCaptor.capture()); - - assertThat(nachrichtCaptor.getValue()) - .usingRecursiveComparison().ignoringFields("mailBody", "subject") - .isEqualTo(PostfachNachrichtTestFactory.create()); - } - - @Nested - class BuildPostfachNachricht { - @Test - void shouldFormatMessage() { - service.buildPostfachNachricht(VorgangTestFactory.create()); - - verify(service).formatMessage(any()); - } - - @Test - void shouldFormSubject() { - service.buildPostfachNachricht(VorgangTestFactory.create()); - - verify(service).formatSubject(any()); - } - - @Test - void shouldHaveVorgangId() { - var nachricht = service.buildPostfachNachricht(VorgangTestFactory.create()); - - assertThat(nachricht.getVorgangId()).isEqualTo(VorgangTestFactory.ID); - } - - @Test - void shouldHavePostfachId() { - var nachricht = service.buildPostfachNachricht(VorgangTestFactory.create()); - - assertThat(nachricht.getPostfachId()).isEqualTo(VorgangTestFactory.POSTFACH_ID); - } - - @Test - void shouldHavePostfachAddress() { - var nachricht = service.buildPostfachNachricht(VorgangTestFactory.create()); - - assertThat(nachricht.getPostfachAddress()).usingRecursiveComparison().isEqualTo(PostfachAddressTestFactory.create()); - } - } - - @Nested - class FormatMessage { - - @Test - void shouldContaineDateTimeInMEZ() { - var vorgang = VorgangTestFactory.createBuilder().createdAt(ZonedDateTime.parse("2001-01-01T05:00:00Z")).build(); - - var message = service.formatMessage(vorgang); - - assertThat(message).contains("01.01.2001 06:00:00"); - } - - @Test - void shouldContaineDateTimeInMESZ() { - var vorgang = VorgangTestFactory.createBuilder().createdAt(ZonedDateTime.parse("2001-08-01T05:00:00Z")).build(); - - var message = service.formatMessage(vorgang); - - assertThat(message).contains("01.08.2001 07:00:00"); - } - - @Test - void shouldContainVorgangNummer() { - var message = service.formatMessage(VorgangTestFactory.create()); - - assertThat(message).contains(VorgangTestFactory.VORGANG_NUMMER); - } - } - - } - -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandMapperTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandMapperTest.java deleted file mode 100644 index 8b1d35c279c643b577c15161e502399fb6047f2c..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandMapperTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.command; - -import static org.assertj.core.api.Assertions.*; - -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.Spy; - -import de.ozgcloud.notification.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.notification.vorgang.VorgangId; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; - -class CommandMapperTest { - - @InjectMocks - private CommandMapper mapper = Mappers.getMapper(CommandMapper.class); - @Spy - private GrpcObjectMapper objectMapper = Mappers.getMapper(GrpcObjectMapper.class); - - @DisplayName("To grpc") - @Nested - class TestToGrpc { - - @Test - void shouldMapPostfachNachrichtCommand() { - var mapped = mapper.toGrpcRequest(CommandTestFactory.createBuilder().body(PostfachNachrichtTestFactory.createAsMap()).build()); - - assertThat(mapped).usingRecursiveComparison() - .ignoringFields("bodyObj_", "memoizedHashCode") - .isEqualTo(GrpcCreateCommandRequestTestFactory.create()); - } - - @DisplayName("to string") - @Nested - class TestToString { - - @Test - void shouldReturnValue() { - var vorgangId = mapper.toString(VorgangId.from("testId")); - - assertThat(vorgangId).isEqualTo("testId"); - } - - @Test - void shouldReturnNull() { - var vorgangId = mapper.toString(null); - - assertThat(vorgangId).isNull(); - } - } - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandRemoteServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandRemoteServiceTest.java deleted file mode 100644 index d71d9a6c8a8f76d672ddc4d6148ebb076a1d41bb..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandRemoteServiceTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.command; - -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.vorgang.grpc.command.CommandServiceGrpc.CommandServiceBlockingStub; - -class CommandRemoteServiceTest { - - @Spy - @InjectMocks - private CommandRemoteService service; - @Mock - private CommandServiceBlockingStub stub; - @Mock - private CommandMapper mapper; - - @Nested - class TestCreateCommand { - - @BeforeEach - void mockStub() { - when(stub.withInterceptors(any())).thenReturn(stub); - } - - @Test - void shoudlCreateRequest() { - service.createCommand(CommandTestFactory.create()); - - verify(mapper).toGrpcRequest(notNull()); - } - - @Test - void shouldCallStub() { - when(mapper.toGrpcRequest(any())).thenReturn(GrpcCreateCommandRequestTestFactory.create()); - - service.createCommand(CommandTestFactory.create()); - - verify(stub).createCommand(notNull()); - } - - } - -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandServiceTest.java deleted file mode 100644 index 8aa1fd217b314044265e025076d342b33638b24f..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandServiceTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.command; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.DisplayName; -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.notification.postfach.PostfachNachrichtTestFactory; - -class CommandServiceTest { - - @Spy - @InjectMocks - private CommandService service; - @Mock - private CommandRemoteService remoteService; - - @DisplayName("Create send postfachNachricht command") - @Nested - class TestCreateSendPostfachNachrichtCommnad { - @Test - void shouldBuildCommand() { - service.createSendPostfachNachrichtCommand(PostfachNachrichtTestFactory.create()); - - verify(service).buildCommand(notNull()); - } - - @Test - void shouldCallRemoteService() { - var command = CommandTestFactory.create(); - doReturn(command).when(service).buildCommand(any()); - - service.createSendPostfachNachrichtCommand(PostfachNachrichtTestFactory.create()); - - verify(remoteService).createCommand(command); - } - } - - @DisplayName("To map") - @Nested - class TestToMap { - - @Test - void shouldContainAllFields() { - var map = service.toMap(PostfachNachrichtTestFactory.create()); - - assertThat(map).isEqualTo(PostfachNachrichtTestFactory.createAsMap()); - } - - @Test - void shouldNOTContainClassEntry() { - var map = service.toMap(PostfachNachrichtTestFactory.create()); - - assertThat(map).doesNotContainKey("class"); - } - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandTestFactory.java deleted file mode 100644 index affcd173e378a8fa9df6af06dfa5916832ba3f39..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandTestFactory.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.command; - -import java.util.Map; -import java.util.UUID; - -import de.ozgcloud.notification.command.Command.CommandOrder; -import de.ozgcloud.notification.vorgang.VorgangTestFactory; - -public class CommandTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - - public static final String RELATION_ID = UUID.randomUUID().toString(); - public static final CommandOrder ORDER = CommandOrder.SEND_POSTFACH_NACHRICHT; - - public static final String BODY_FIELD_NAME = "name"; - public static final String BODY_FIELD_VALUE = "fritz"; - - public static final Command create() { - return createBuilder().build(); - } - - public static final Command.CommandBuilder createBuilder() { - return Command.builder() - .vorgangId(VorgangTestFactory.ID) - .relationId(RELATION_ID) - .order(ORDER) - .body(Map.of(BODY_FIELD_NAME, BODY_FIELD_VALUE)); - - } -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/command/GrpcCreateCommandRequestTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/command/GrpcCreateCommandRequestTestFactory.java deleted file mode 100644 index 17eb41f083b5a573c5f2b7b2b466ae0b92b7c201..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/command/GrpcCreateCommandRequestTestFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.command; - -import de.ozgcloud.notification.vorgang.VorgangTestFactory; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectTestFactory; -import de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest; - -public class GrpcCreateCommandRequestTestFactory { - - public static final GrpcCreateCommandRequest create() { - return createBuilder().build(); - } - - public static final GrpcCreateCommandRequest.Builder createBuilder() { - return GrpcCreateCommandRequest.newBuilder() - .setVorgangId(VorgangTestFactory.ID.toString()) - .setRelationId(CommandTestFactory.RELATION_ID) - .setOrderString(CommandTestFactory.ORDER.name()) - .setBodyObj(GrpcObjectTestFactory.create()); - } -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/email/EmailRecipientMapperTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/email/EmailRecipientMapperTest.java deleted file mode 100644 index 56550d12bfc12fac54f75e40fda445f7e2bf2aa7..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/email/EmailRecipientMapperTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.email; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -import static org.assertj.core.api.Assertions.*; - -import de.ozgcloud.notification.user.RecipientTestFactory; - -class EmailRecipientMapperTest { - - private EmailRecipientMapper mapper = Mappers.getMapper(EmailRecipientMapper.class); - - @Nested - class TestToGrpc { - - @Test - void shouldMapRecipient() { - var grpcEmailRecipient = mapper.toGrpc(RecipientTestFactory.create()); - - assertThat(grpcEmailRecipient).usingRecursiveComparison().isEqualTo(GrpcEmailRecipientTestFactory.create()); - } - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/email/EmailRemoteServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/email/EmailRemoteServiceTest.java deleted file mode 100644 index 239479d4f3a924dae230ded306905702898bb0ab..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/email/EmailRemoteServiceTest.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.email; - -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.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.nachrichten.email.EmailServiceGrpc.EmailServiceBlockingStub; -import de.ozgcloud.nachrichten.email.GrpcRecipient; -import de.ozgcloud.nachrichten.email.GrpcSendEmailRequest; -import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor; - -class EmailRemoteServiceTest { - - @InjectMocks - private EmailRemoteService remoteService; - - @Mock - private EmailServiceBlockingStub emailStub; - - @Mock - private EmailRecipientMapper recipientMapper; - - @Nested - class TestSendNotification { - - @Captor - private ArgumentCaptor<GrpcSendEmailRequest> requestCaptor; - - private final static GrpcRecipient GRPC_RECIPIENT = GrpcEmailRecipientTestFactory.create(); - - @BeforeEach - void initTest() { - when(recipientMapper.toGrpc(any())).thenReturn(GRPC_RECIPIENT); - when(emailStub.withInterceptors(any())).thenReturn(emailStub); - } - - @Test - void shouldCallEmailServiceOnlyOnce() { - remoteService.sendEmail(UserEmailTestFactory.create()); - - verify(emailStub, times(1)).sendEmail(any()); - } - - @Test - void shouldNotifyAllRecipients() { - remoteService.sendEmail(UserEmailTestFactory.create()); - - verify(emailStub).sendEmail(requestCaptor.capture()); - assertThat(requestCaptor.getValue().getRecipientsList()).hasSameSizeAs(UserEmailTestFactory.RECIPIENTS); - } - - @Test - void shouldConvertCorrectly() { - remoteService.sendEmail(UserEmailTestFactory.create()); - - verify(emailStub).sendEmail(requestCaptor.capture()); - assertThat(requestCaptor.getValue().getRecipientsList()).first().usingRecursiveComparison().isEqualTo(GRPC_RECIPIENT); - } - - @Test - void shouldUseInterceptor() { - remoteService.sendEmail(UserEmailTestFactory.create()); - - verify(emailStub).withInterceptors(any(NotificationManagerCallContextAttachingInterceptor.class)); - } - - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/email/GrpcEmailRecipientTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/email/GrpcEmailRecipientTestFactory.java deleted file mode 100644 index ef7d5b5e338c67b54bbca7746a9ced69e7d1369c..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/email/GrpcEmailRecipientTestFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.email; - -import de.ozgcloud.nachrichten.email.GrpcRecipient; - -import static de.ozgcloud.notification.user.RecipientTestFactory.*; - -public class GrpcEmailRecipientTestFactory { - - - public static GrpcRecipient create() { - return createBuilder().build(); - } - - public static GrpcRecipient.Builder createBuilder(){ - return GrpcRecipient.newBuilder() - .setFirstName(FIRST_NAME) - .setLastName(LAST_NAME) - .setEmail(EMAIL); - } -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/email/UserEmailTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/email/UserEmailTestFactory.java deleted file mode 100644 index a45a726387de64c41f790995b69d54770ca0086e..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/email/UserEmailTestFactory.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.email; - -import java.util.List; - -import de.ozgcloud.notification.email.UserEmail.UserEmailBuilder; -import de.ozgcloud.notification.user.Recipient; -import de.ozgcloud.notification.user.RecipientTestFactory; -import de.ozgcloud.notification.user.UserNotificationService; -import de.ozgcloud.notification.vorgang.VorgangTestFactory; - -public class UserEmailTestFactory { - - public static final List<Recipient> RECIPIENTS = List.of(RecipientTestFactory.create()); - - public static UserEmail create() { - return createBuilder().build(); - } - - public static UserEmailBuilder createBuilder() { - return UserEmail.builder() - .recipients(RECIPIENTS) - .subject(UserNotificationService.MAIL_SUBJECT_TEMPLATE.formatted(VorgangTestFactory.VORGANG_NAME)) - .body(UserNotificationService.MAIL_BODY); - } -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/GrpcPostfachAddressTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/postfach/GrpcPostfachAddressTestFactory.java deleted file mode 100644 index eb21918f94f2bc40c27636351e944a36e71d1d99..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/GrpcPostfachAddressTestFactory.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.ozgcloud.notification.postfach; - -import de.ozgcloud.vorgang.common.GrpcObject; -import de.ozgcloud.vorgang.common.GrpcProperty; -import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress; - -public class GrpcPostfachAddressTestFactory { - - public static GrpcPostfachAddress create() { - return createBuilder().build(); - } - - public static GrpcPostfachAddress.Builder createBuilder() { - return GrpcPostfachAddress.newBuilder() - .setType(PostfachAddressTestFactory.TYPE) - .setIdentifier(createIdentifier()) - .setVersion(PostfachAddressTestFactory.VERSION); - } - public static GrpcObject createIdentifier() { - return GrpcObject.newBuilder() - .addProperty(GrpcProperty.newBuilder() - .setName(StringBasedIdentifier.POSTFACH_ID_FIELD) - .addValue(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE) - .build()) - .build(); - } -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachAddressTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachAddressTestFactory.java deleted file mode 100644 index 14873f7a0a2fa24b0b07cadb2979e1f39f58308d..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachAddressTestFactory.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.ozgcloud.notification.postfach; - -import java.util.UUID; - -public class PostfachAddressTestFactory { - - public final static int TYPE = 1; - public static final String STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE = UUID.randomUUID().toString(); - public final static StringBasedIdentifier IDENTIFIER = StringBasedIdentifier.builder().postfachId(STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE) - .build(); - public static final String VERSION = "1.0"; - - public static PostfachAddress create() { - return createBuilder().build(); - } - - public static PostfachAddress.PostfachAddressBuilder createBuilder() { - return PostfachAddress.builder() - .type(TYPE) - .identifier(IDENTIFIER) - .version(VERSION); - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachNachrichtTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachNachrichtTestFactory.java deleted file mode 100644 index 24ad218e7e799b33c7e33b00b9b0aa40611350a6..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachNachrichtTestFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.postfach; - -import java.util.Map; - -import de.ozgcloud.notification.vorgang.VorgangTestFactory; - -public class PostfachNachrichtTestFactory { - - static final String MESSAGE = "Lorem Ipsum"; - static final String SUBJECT = "delores est"; - - public static final PostfachNachricht create() { - return createBuilder().build(); - } - - public static final PostfachNachricht.PostfachNachrichtBuilder createBuilder() { - return PostfachNachricht.builder() - .vorgangId(VorgangTestFactory.ID) - .postfachId(VorgangTestFactory.POSTFACH_ID) - .postfachAddress(PostfachAddressTestFactory.create()) - .mailBody(MESSAGE) - .subject(SUBJECT); - } - - public static final Map<String, Object> createAsMap() { - return Map.of( - PostfachNachricht.FIELD_VORGANG_ID, VorgangTestFactory.ID, - PostfachNachricht.FIELD_POSTFACH_ID, VorgangTestFactory.POSTFACH_ID, - PostfachNachricht.FIELD_POSTFACH_ADDRESS, createPostfachAddressMap(), - PostfachNachricht.FIELD_SUBJECT, SUBJECT, - PostfachNachricht.FIELD_MESSAGE, MESSAGE, - PostfachNachricht.FIELD_REPLY_OPTION, PostfachNachricht.DEFAULT_REPLY_OPTION); - } - - public static final Map<String, Object> createPostfachAddressMap(){ - return Map.of(PostfachAddress.TYPE_FIELD, PostfachAddressTestFactory.TYPE, - PostfachAddress.VERSION_FIELD, PostfachAddressTestFactory.VERSION, - PostfachAddress.IDENTIFIER_FIELD, createIdentifierMap()); - } - - public static final Map<String, Object> createIdentifierMap(){ - return Map.of(PostfachNachricht.FIELD_POSTFACH_ID, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachRemoteServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachRemoteServiceTest.java deleted file mode 100644 index 3ca7a8bae39a3b2f71b2cf03276b22c935aa2c3f..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachRemoteServiceTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2023 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.notification.postfach; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.nachrichten.postfach.GrpcIsPostfachConfiguredResponse; -import de.ozgcloud.nachrichten.postfach.PostfachServiceGrpc.PostfachServiceBlockingStub; - -class PostfachRemoteServiceTest { - - @Spy - @InjectMocks - private PostfachRemoteService postfachRemoteService; - - @Mock - private PostfachServiceBlockingStub blockingStub; - - private static final GrpcIsPostfachConfiguredResponse GRPC_POSTFACH_RESPONSE = GrpcIsPostfachConfiguredResponse.newBuilder().build(); - - @BeforeEach - void setup() { - when(blockingStub.withInterceptors(any())).thenReturn(blockingStub); - when(blockingStub.isPostfachConfigured(any())).thenReturn(GRPC_POSTFACH_RESPONSE); - } - - @Test - void shouldGetPostfachServiceStub() { - postfachRemoteService.isPostfachConfigured(); - - verify(postfachRemoteService).getPostfachServiceStub(); - } - - @Test - void shouldCallIsPostfachConfigured() { - postfachRemoteService.isPostfachConfigured(); - - verify(blockingStub).isPostfachConfigured(any()); - } - - @Test - void shouldReturnIsPostfachConfigured() { - var postfachResponse = GrpcIsPostfachConfiguredResponse.newBuilder().setIsConfigured(true).build(); - when(blockingStub.isPostfachConfigured(any())).thenReturn(postfachResponse); - - var isPostfachConfigured = postfachRemoteService.isPostfachConfigured(); - - assertTrue(isPostfachConfigured); - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachServiceTest.java deleted file mode 100644 index 8451ae541dcec74de9983241a90e4e12937c6a8c..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachServiceTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2023 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.notification.postfach; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -class PostfachServiceTest { - - @InjectMocks - private PostfachService postfachService; - @Mock - private PostfachRemoteService postfachRemoteService; - - @Test - void shouldCallRemoteService() { - postfachService.isPostfachConfigured(); - - verify(postfachRemoteService).isPostfachConfigured(); - } - - @Test - void shouldReturnRemoteServiceResult() { - when(postfachRemoteService.isPostfachConfigured()).thenReturn(true); - - var result = postfachService.isPostfachConfigured(); - - assertTrue(result); - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/GrpcFindRecipientRequestTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/GrpcFindRecipientRequestTestFactory.java deleted file mode 100644 index 428b5812fad8e764015c8a8cadb9db3ea97d3edf..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/user/GrpcFindRecipientRequestTestFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.user; - -import de.ozgcloud.user.grpc.recipient.GrpcFindRecipientResponse; -import de.ozgcloud.user.recipient.GrpcRecipient; - -public class GrpcFindRecipientRequestTestFactory { - - public static final GrpcRecipient GRPC_RECIPIENT = GrpcUserRecipientTestFactory.create(); - - public static GrpcFindRecipientResponse create() { - return createBuilder().build(); - } - - public static GrpcFindRecipientResponse.Builder createBuilder() { - return GrpcFindRecipientResponse.newBuilder().addRecipient(GRPC_RECIPIENT); - } - -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/GrpcUserRecipientTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/GrpcUserRecipientTestFactory.java deleted file mode 100644 index f2d58422b6d37d3456fb2b981185dba0a9971664..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/user/GrpcUserRecipientTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.user; - -import de.ozgcloud.user.recipient.GrpcRecipient; - -public class GrpcUserRecipientTestFactory { - - public static GrpcRecipient create() { - return createBuilder().build(); - } - - public static GrpcRecipient.Builder createBuilder() { - return GrpcRecipient.newBuilder() - .setFirstName(RecipientTestFactory.FIRST_NAME) - .setLastName(RecipientTestFactory.LAST_NAME) - .setEmail(RecipientTestFactory.EMAIL); - } -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/RecipientTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/RecipientTestFactory.java deleted file mode 100644 index e4da940cf2bbbacbaddc7f2f56b8341efdae897b..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/user/RecipientTestFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.user; - -import de.ozgcloud.notification.user.Recipient.RecipientBuilder; - -public class RecipientTestFactory { - - public static final String FIRST_NAME = "first"; - public static final String LAST_NAME = "last"; - public static final String EMAIL = "email@example.com"; - - public static Recipient create() { - return createBuilder().build(); - } - - public static RecipientBuilder createBuilder() { - return Recipient.builder() - .firstName(FIRST_NAME) - .lastName(LAST_NAME) - .email(EMAIL); - } -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserNotificationEventListenerTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/UserNotificationEventListenerTest.java deleted file mode 100644 index 7d8eeef30b8efc2f8e6d78862e8b454efe61865e..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserNotificationEventListenerTest.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.user; - -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.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.command.VorgangCreatedEvent; -import de.ozgcloud.notification.vorgang.VorgangId; -import de.ozgcloud.notification.vorgang.VorgangService; -import de.ozgcloud.notification.vorgang.VorgangTestFactory; - -class UserNotificationEventListenerTest { - - @InjectMocks - private UserNotificationEventListener userNotificationEventListener; - - @Mock - private UserNotificationService userNotificationService; - @Mock - private VorgangService vorgangService; - - @DisplayName("On Vorgang created") - @Nested - class TestOnVorgangCreated { - - private static final VorgangCreatedEvent EVENT = new VorgangCreatedEvent(VorgangTestFactory.ID.toString()); - - @DisplayName("with existing orgaId") - @Nested - class TestWithOrgaId { - - @BeforeEach - void initMock() { - when(vorgangService.getVorgang(any())).thenReturn(VorgangTestFactory.create()); - } - - @Test - void shouldCallVorgangService() { - userNotificationEventListener.onVorgangCreated(EVENT); - - verify(vorgangService).getVorgang(VorgangId.from(EVENT.getSource())); - } - - @Test - void shouldNotifyWithOrganisationeinheitIds() { - var vorgang = VorgangTestFactory.create(); - when(vorgangService.getVorgang(any())).thenReturn(vorgang); - - userNotificationEventListener.onVorgangCreated(EVENT); - - verify(userNotificationService).sendNotification(vorgang); - } - } - - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserNotificationServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/UserNotificationServiceTest.java deleted file mode 100644 index b4658fa62cb4f37df1a1158f8c8517195c3e6f3d..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserNotificationServiceTest.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.user; - -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.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.notification.email.EmailRemoteService; -import de.ozgcloud.notification.email.UserEmail; -import de.ozgcloud.notification.email.UserEmailTestFactory; -import de.ozgcloud.notification.vorgang.Vorgang; -import de.ozgcloud.notification.vorgang.VorgangTestFactory; - -class UserNotificationServiceTest { - - @Spy - @InjectMocks - private UserNotificationService service; - - @Mock - private EmailRemoteService emailRemoteService; - @Mock - private UserRemoteService userRemoteService; - - @DisplayName("Send notification") - @Nested - class TestSendNotification { - - @DisplayName("with valid orgaId") - @Nested - class TestWithValidOrgaId { - - @BeforeEach - void init() { - when(userRemoteService.getRecipients(VorgangTestFactory.ORGANISATIONS_EINHEIT_ID)).thenReturn(List.of(RecipientTestFactory.create())); - doNothing().when(emailRemoteService).sendEmail(any(UserEmail.class)); - } - - @Test - void shouldGetRecipients() { - service.sendNotification(VorgangTestFactory.create()); - - verify(userRemoteService).getRecipients(VorgangTestFactory.ORGANISATIONS_EINHEIT_ID); - } - - @Test - void shouldSendEmail() { - var email = UserEmailTestFactory.create(); - doReturn(email).when(service).buildUserEmail(anyList(), anyString()); - - service.sendNotification(VorgangTestFactory.create()); - - verify(emailRemoteService).sendEmail(email); - } - - @Test - void shouldSetSubject() { - service.sendNotification(VorgangTestFactory.create()); - - verify(service).buildUserEmail(anyList(), eq("Neuer Vorgang: " + VorgangTestFactory.VORGANG_NAME)); - - } - } - - @DisplayName("with null as orgaId") - @Nested - class TestWithInvalidOrgaId { - - private Vorgang vorgang = VorgangTestFactory.createBuilder().organisationseinheitenId(null).build(); - - @Test - void shouldNotCallUserRemoteService() { - service.sendNotification(vorgang); - - verify(userRemoteService, never()).getRecipients(anyString()); - } - - @Test - void shouldNotCallEmailRemoteServie() { - service.sendNotification(vorgang); - - verify(emailRemoteService, never()).sendEmail(any(UserEmail.class)); - } - } - - @Test - void shouldThrowExceptionWhenVorgangNull() { - assertThatThrownBy(() -> service.sendNotification(null)) - .withFailMessage("organisationsEinheitId cannot be null.") - .isInstanceOf(IllegalArgumentException.class); - } - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserRecipientMapperTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/UserRecipientMapperTest.java deleted file mode 100644 index 91cc27326ca9240b66017c3e8be112803309d71b..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserRecipientMapperTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.user; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -import static org.assertj.core.api.Assertions.*; - -class UserRecipientMapperTest { - - private UserRecipientMapper mapper = Mappers.getMapper(UserRecipientMapper.class); - - @Nested - class TestFromGrpc { - - @Test - void shouldMapRecipient() { - var recipient = mapper.fromGrpc(GrpcUserRecipientTestFactory.create()); - - assertThat(recipient).usingRecursiveComparison().isEqualTo(RecipientTestFactory.create()); - } - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserRemoteServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/UserRemoteServiceTest.java deleted file mode 100644 index bbd962ca745bff4ce755c0220208a049f27fddbb..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserRemoteServiceTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.user; - -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.notification.NotificationManagerCallContextAttachingInterceptor; -import de.ozgcloud.notification.vorgang.VorgangTestFactory; -import de.ozgcloud.user.grpc.recipient.RecipientServiceGrpc.RecipientServiceBlockingStub; - -class UserRemoteServiceTest { - - @InjectMocks - private UserRemoteService remoteService; - - @Mock - private RecipientServiceBlockingStub stub; - @Mock - private UserRecipientMapper mapper; - - @Nested - class TestRequestRecipients { - - @BeforeEach - void initTest() { - when(stub.findRecipientByOrganisationsEinheitId(any())).thenReturn(GrpcFindRecipientRequestTestFactory.create()); - when(stub.withInterceptors(any())).thenReturn(stub); - } - - @Test - void shouldCallMapper() { - remoteService.getRecipients(VorgangTestFactory.ORGANISATIONS_EINHEIT_ID); - - verify(mapper).fromGrpc(GrpcFindRecipientRequestTestFactory.GRPC_RECIPIENT); - } - - @Test - void shouldUseInterceptor() { - remoteService.getRecipients(VorgangTestFactory.ORGANISATIONS_EINHEIT_ID); - - verify(stub).withInterceptors(any(NotificationManagerCallContextAttachingInterceptor.class)); - } - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcServiceKontoTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcServiceKontoTestFactory.java deleted file mode 100644 index aa80911f97481bd1fafbe0b11d30e53fc6713d61..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcServiceKontoTestFactory.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.ozgcloud.notification.vorgang; - -import de.ozgcloud.notification.postfach.GrpcPostfachAddressTestFactory; -import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto; - -public class GrpcServiceKontoTestFactory { - - public final static String TYPE = "OSI"; - public final static String TRUST_LEVEL = "STORK-QAA-LEVEL-1"; - - public static GrpcServiceKonto create() { - return createBuilder().build(); - } - - public static GrpcServiceKonto.Builder createBuilder() { - return GrpcServiceKonto.newBuilder() - .setType(TYPE) - .setTrustLevel(TRUST_LEVEL) - .addPostfachAddresses(GrpcPostfachAddressTestFactory.create()); - } -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcVorgangHeadTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcVorgangHeadTestFactory.java deleted file mode 100644 index 88a62e902d7b3a33497b77ffe16a0fb1723f352f..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcVorgangHeadTestFactory.java +++ /dev/null @@ -1,15 +0,0 @@ -package de.ozgcloud.notification.vorgang; - -import de.ozgcloud.vorgang.vorgang.GrpcVorgangHead; - -public class GrpcVorgangHeadTestFactory { - - public static GrpcVorgangHead create() { - return createBuilder().build(); - } - - public static GrpcVorgangHead.Builder createBuilder() { - return GrpcVorgangHead.newBuilder() - .setServiceKonto(GrpcServiceKontoTestFactory.create()); - } -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcVorgangTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcVorgangTestFactory.java deleted file mode 100644 index 4856525424aada9ef9209e3fa7837fcfecaf1247..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcVorgangTestFactory.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.vorgang; - -import de.ozgcloud.vorgang.vorgang.GrpcAntragsteller; -import de.ozgcloud.vorgang.vorgang.GrpcEingang; -import de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang; -import de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle; - -public class GrpcVorgangTestFactory { - - public static GrpcVorgangWithEingang create() { - return createBuilder().build(); - } - - public static GrpcVorgangWithEingang.Builder createBuilder() { - return GrpcVorgangWithEingang.newBuilder() - .setId(VorgangTestFactory.ID.toString()) - .setName(VorgangTestFactory.VORGANG_NAME) - .setNummer(VorgangTestFactory.VORGANG_NUMMER) - .setCreatedAt(VorgangTestFactory.CREATED_AT_STR) - .setFormEngineName(VorgangTestFactory.FORM_ENGINE_NAME) - .setHeader(GrpcVorgangHeadTestFactory.create()) - .setEingang(GrpcEingang.newBuilder() - .setAntragsteller(GrpcAntragsteller.newBuilder() - .setPostfachId(VorgangTestFactory.POSTFACH_ID) - .build()) - .setZustaendigeStelle( - GrpcZustaendigeStelle.newBuilder().setOrganisationseinheitenId(VorgangTestFactory.ORGANISATIONS_EINHEIT_ID).build()) - .build()); - - } -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangMapperTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangMapperTest.java deleted file mode 100644 index a3fbf1407cbb0119151a844b4c2caaa81f2003e2..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangMapperTest.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.vorgang; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -import de.ozgcloud.notification.postfach.PostfachAddressTestFactory; - -class VorgangMapperTest { - - private final VorgangMapper mapper = Mappers.getMapper(VorgangMapper.class); - - @DisplayName("From grpc") - @Nested - class TestFromGrpc { - - @Test - void shouldMapVorgang() { - var mapped = fromGrpc(); - - assertThat(mapped).usingRecursiveComparison().ignoringFields("postfachAddress").isEqualTo(VorgangTestFactory.create()); - } - - @DisplayName("postfachAddress") - @Nested - class TestPostfachAddress { - - @Test - void shouldMapIfServiceKontoExists() { - var mapped = fromGrpc(); - - assertThat(mapped.getPostfachAddress()).usingRecursiveComparison().isEqualTo(PostfachAddressTestFactory.create()); - } - - @Test - void shouldBeEmptyIfServiceKontoNotExists() { - var mapped = mapper.fromGrpc(GrpcVorgangTestFactory.createBuilder().clearHeader().build()); - - assertThat(mapped.getPostfachAddress()).isNull(); - } - } - - private Vorgang fromGrpc() { - return mapper.fromGrpc(GrpcVorgangTestFactory.create()); - } - } -} \ No newline at end of file diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangRemoteServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangRemoteServiceTest.java deleted file mode 100644 index d9a8104c5ac7b45450fa690e77f25f1bb32bace1..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangRemoteServiceTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.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.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor; -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest; -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangResponse; -import de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang; -import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; - -class VorgangRemoteServiceTest { - - @InjectMocks - private VorgangRemoteService remoteService; - @Mock - private VorgangServiceBlockingStub stub; - @Mock - private VorgangMapper mapper; - - @Nested - class TestFindVorgangById { - - private static final GrpcVorgangWithEingang GRPC_VORGANG = GrpcVorgangTestFactory.create(); - private static final Vorgang VORGANG = VorgangTestFactory.create(); - - @Captor - private ArgumentCaptor<GrpcFindVorgangWithEingangRequest> requestCaptor; - - @BeforeEach - void initStubMock() { - var response = GrpcFindVorgangWithEingangResponse.newBuilder().setVorgangWithEingang(GRPC_VORGANG).build(); - when(stub.findVorgangWithEingang(any())).thenReturn(response); - - when(stub.withInterceptors(any())).thenReturn(stub); - } - - @BeforeEach - void initMapperMock() { - when(mapper.fromGrpc(any())).thenReturn(VORGANG); - } - - @Test - void shouldUseInterceptor() { - remoteService.getVorgang(VorgangTestFactory.ID); - - verify(stub).withInterceptors(any(NotificationManagerCallContextAttachingInterceptor.class)); - } - - @Test - void shouldCallStub() { - remoteService.getVorgang(VorgangTestFactory.ID); - - verify(stub).findVorgangWithEingang(requestCaptor.capture()); - - assertThat(requestCaptor.getValue().getId()).isEqualTo(VorgangTestFactory.ID.toString()); - } - - @Test - void shouldCallMapper() { - remoteService.getVorgang(VorgangTestFactory.ID); - - verify(mapper).fromGrpc(same(GRPC_VORGANG)); - } - - @Test - void shouldReturnMappedVorgang() { - var result = remoteService.getVorgang(VorgangTestFactory.ID); - - assertThat(result).isSameAs(VORGANG); - } - - } - -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangServiceTest.java deleted file mode 100644 index a0e4f9efe04661c26590c0231dcd91e78816e164..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangServiceTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -class VorgangServiceTest { - - @InjectMocks - private VorgangService service; - - @Mock - private VorgangRemoteService remoteService; - - @Nested - class TestGetVorgang { - @Test - void shouldCallRemoteService() { - service.getVorgang(VorgangTestFactory.ID); - - verify(remoteService).getVorgang(VorgangTestFactory.ID); - } - - @Test - void shouldReturnResultFromRemoteService() { - var vorgang = VorgangTestFactory.create(); - when(remoteService.getVorgang(any())).thenReturn(vorgang); - - var result = service.getVorgang(VorgangTestFactory.ID); - - assertThat(result).isSameAs(vorgang); - } - } - -} diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangTestFactory.java deleted file mode 100644 index 47162ac2733c355fb25902e9ad0f267b5de1eef6..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangTestFactory.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2022 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.notification.vorgang; - -import java.time.ZonedDateTime; -import java.util.UUID; - -import de.ozgcloud.notification.postfach.PostfachAddressTestFactory; - -public class VorgangTestFactory { - - public static final VorgangId ID = VorgangId.from(UUID.randomUUID().toString()); - - public static final String VORGANG_NAME = "Antrag auf Toast"; - public static final String VORGANG_NUMMER = "1234"; - public static final String CREATED_AT_STR = "2001-04-01T10:30:00Z"; - public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); - - public static final String POSTFACH_ID = UUID.randomUUID().toString(); - public static final String FORM_ENGINE_NAME = "deluxeEngine"; - public static final String ORGANISATIONS_EINHEIT_ID = "1234567889"; - - public static Vorgang create() { - return createBuilder().build(); - } - - public static Vorgang.VorgangBuilder createBuilder() { - return Vorgang.builder() - .id(ID) - .vorgangName(VORGANG_NAME) - .vorgangNummer(VORGANG_NUMMER) - .createdAt(CREATED_AT) - .postfachId(POSTFACH_ID) - .postfachAddress(PostfachAddressTestFactory.create()) - .formEngineName(FORM_ENGINE_NAME) - .organisationseinheitenId(ORGANISATIONS_EINHEIT_ID); - } - -} diff --git a/notification-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/notification-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension deleted file mode 100644 index 79b126e6cdb86bec1f4f08c205de8961bde1934a..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension +++ /dev/null @@ -1 +0,0 @@ -org.mockito.junit.jupiter.MockitoExtension \ No newline at end of file diff --git a/notification-manager/src/test/resources/junit-platform.properties b/notification-manager/src/test/resources/junit-platform.properties deleted file mode 100644 index 1cebb76d5a58ac034b2627d12411d82d1e85821e..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/resources/junit-platform.properties +++ /dev/null @@ -1 +0,0 @@ -junit.jupiter.extensions.autodetection.enabled = true \ No newline at end of file diff --git a/notification-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/notification-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker deleted file mode 100644 index ca6ee9cea8ec189a088d50559325d4e84ff8ad09..0000000000000000000000000000000000000000 --- a/notification-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +++ /dev/null @@ -1 +0,0 @@ -mock-maker-inline \ No newline at end of file diff --git a/pom.xml b/pom.xml index 1dfbfb7846a15e1215968b99ebe9228d08ca28f4..bf4b4ecfcb007964954c36bad24cdd8a480f897e 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.6.0-SNAPSHOT</version> + <version>2.7.0-SNAPSHOT</version> <name>OZG-Cloud Vorgang Manager</name> <packaging>pom</packaging> @@ -41,13 +41,10 @@ <modules> <module>vorgang-manager-interface</module> <module>vorgang-manager-server</module> - <module>nachrichten-manager</module> <module>vorgang-manager-utils</module> - <module>notification-manager</module> <module>vorgang-manager-command</module> <module>bescheid-manager</module> <module>vorgang-manager-base</module> - <module>nachrichten-bayernid-proxy</module> </modules> <build> diff --git a/vorgang-manager-base/pom.xml b/vorgang-manager-base/pom.xml index fdbefa64727d826638e6ea8fca797b2388833b8c..16aaa67122d0dbcbb8bb5a398e981fed2e1293ab 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.0.1-SNAPSHOT</version> + <version>4.1.0-SNAPSHOT</version> <relativePath /> </parent> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-base</artifactId> - <version>2.6.0-SNAPSHOT</version> + <version>2.7.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 e8ce77739c50501fe9e1ab862b4e1b67da34cd4f..ed489b6236cce36418c132be176d709394b0a1f8 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.0.1</version> + <version>4.1.0-SNAPSHOT</version> <relativePath/> </parent> <groupId>de.ozgcloud.command</groupId> <artifactId>command-manager</artifactId> - <version>2.6.0-SNAPSHOT</version> + <version>2.7.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 13bb98f348ea36b237aa56a7489e09cde81e51a4..ca299a6d8eb8f93ad3c36d8daadc1b94b267081a 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.0.1</version> + <version>4.1.0-SNAPSHOT</version> <relativePath/> </parent> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-interface</artifactId> - <version>2.6.0-SNAPSHOT</version> + <version>2.7.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/antragraum.model.proto b/vorgang-manager-interface/src/main/protobuf/antragraum.model.proto deleted file mode 100644 index 062c92b7c6e0d9cdc7c2f40902737f61bed20094..0000000000000000000000000000000000000000 --- a/vorgang-manager-interface/src/main/protobuf/antragraum.model.proto +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.nachrichten.antragraum; - -import "postfach.model.proto"; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.antragraum"; -option java_outer_classname = "AntragraumModelProto"; - -message GrpcFindRueckfragenRequest { - string samlToken = 1; - string postfachId = 2; -} - -message GrpcFindRueckfragenResponse { - repeated GrpcRueckfrage rueckfrage = 1; -} - -message GrpcRueckfrage { - string id = 1; - string vorgangId = 2; - string vorgangName = 3; - string sentAt = 4; - string answeredAt = 5; - string status = 6; - string text = 7; - repeated string attachmentFileId = 8; - repeated GrpcRueckfrageAnswer answers = 9; -} - -message GrpcSendRueckfrageAnswerRequest { - string samlToken = 1; - GrpcRueckfrageAnswer answer = 2; -} - -message GrpcRueckfrageAnswer { - string rueckfrageId = 1; - string answerText = 2; - repeated string attachmentFileId = 3; -} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/antragraum.proto b/vorgang-manager-interface/src/main/protobuf/antragraum.proto deleted file mode 100644 index 0fa6d67dffed44a28d58a531d8ff1ad03bf128ea..0000000000000000000000000000000000000000 --- a/vorgang-manager-interface/src/main/protobuf/antragraum.proto +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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.nachrichten.antragraum; - -import "antragraum.model.proto"; -import "command.model.proto"; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.antragraum"; -option java_outer_classname = "AntragraumProto"; - -service AntragraumService { - rpc FindRueckfragen(GrpcFindRueckfragenRequest) returns (GrpcFindRueckfragenResponse) { - } - - rpc SendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequest) returns (de.ozgcloud.vorgang.grpc.command.GrpcCommand) { - } -} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/bescheid.model.proto b/vorgang-manager-interface/src/main/protobuf/bescheid.model.proto index 992c4968e30a8439ca6c2087345140e8e26a1b09..e32cd23a96be451c775570e10de3bcb3d8413f1c 100644 --- a/vorgang-manager-interface/src/main/protobuf/bescheid.model.proto +++ b/vorgang-manager-interface/src/main/protobuf/bescheid.model.proto @@ -21,30 +21,51 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ - syntax = "proto3"; +syntax = "proto3"; - package de.ozgcloud.bescheid; +package de.ozgcloud.bescheid; - option java_multiple_files = true; - option java_package = "de.ozgcloud.bescheid"; - option java_outer_classname = "BescheidModelProto"; +option java_multiple_files = true; +option java_package = "de.ozgcloud.bescheid"; +option java_outer_classname = "BescheidModelProto"; message GrpcGetBescheidDraftRequest { - string vorgangId = 1; + string vorgangId = 1; } message GrpcGetBescheidDraftResponse { - GrpcBescheid bescheid = 1; + GrpcBescheid bescheid = 1; +} + +message GrpcGetAllBescheidRequest { + string vorgangId = 1; +} + +message GrpcGetAllBescheidResponse { + repeated GrpcBescheid bescheid = 1; } message GrpcBescheid { - string beschiedenAm = 1; - bool bewilligt = 2; - string bescheidDocument = 3; - repeated string attachments = 4; - string sendBy = 5; - string nachrichtText = 6; - string nachrichtSubject = 7; - string id = 8; - int64 version = 9; + string beschiedenAm = 1; + bool bewilligt = 2; + string bescheidDocument = 3; + repeated string attachments = 4; + string sendBy = 5; + string nachrichtText = 6; + string nachrichtSubject = 7; + string id = 8; + int64 version = 9; + string status = 10; +} + +message GrpcBescheidManagerConfigRequest {} + +message GrpcBescheidManagerConfigResponse { + string version = 1; + string javaVersion = 2; + GrpcBescheidManagerFeatures features = 3; +} + +message GrpcBescheidManagerFeatures { + bool canCreateBescheidDocument = 1; } \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/bescheid.proto b/vorgang-manager-interface/src/main/protobuf/bescheid.proto index 9e6bb91b36c2c0257190cc98fcede20a2b8c6393..49d355a435c9cad12c457229967db728b886053e 100644 --- a/vorgang-manager-interface/src/main/protobuf/bescheid.proto +++ b/vorgang-manager-interface/src/main/protobuf/bescheid.proto @@ -21,17 +21,23 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ - syntax = "proto3"; +syntax = "proto3"; - package de.ozgcloud.bescheid; +package de.ozgcloud.bescheid; - import "bescheid.model.proto"; +import "bescheid.model.proto"; - option java_multiple_files = true; - option java_package = "de.ozgcloud.bescheid"; - option java_outer_classname = "BescheidProto"; +option java_multiple_files = true; +option java_package = "de.ozgcloud.bescheid"; +option java_outer_classname = "BescheidProto"; - service BescheidService { - rpc getBescheidDraft(GrpcGetBescheidDraftRequest) returns (GrpcGetBescheidDraftResponse) { - } - } \ No newline at end of file +service BescheidService { + rpc getBescheidDraft(GrpcGetBescheidDraftRequest) returns (GrpcGetBescheidDraftResponse) { + } + + rpc getAll(GrpcGetAllBescheidRequest) returns (GrpcGetAllBescheidResponse) { + } + + rpc getConfig(GrpcBescheidManagerConfigRequest) returns (GrpcBescheidManagerConfigResponse) { + } +} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/email.model.proto b/vorgang-manager-interface/src/main/protobuf/email.model.proto deleted file mode 100644 index 25771368379bf69746f41b5688fd608fd2c77e87..0000000000000000000000000000000000000000 --- a/vorgang-manager-interface/src/main/protobuf/email.model.proto +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.email"; -option java_outer_classname = "EmailModelProto"; - -message GrpcRecipient { - string firstName = 1; - string lastName = 2; - string email = 3; -} - -message GrpcSendEmailRequest { - repeated GrpcRecipient recipients = 1; - string subject = 2; - string body = 3; -} - -message GrpcSendEmailResponse { -} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/email.proto b/vorgang-manager-interface/src/main/protobuf/email.proto deleted file mode 100644 index 2f6eb15bf366aeabc4fde7338a30d016d84ea352..0000000000000000000000000000000000000000 --- a/vorgang-manager-interface/src/main/protobuf/email.proto +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.email; - -import "email.model.proto"; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.email"; -option java_outer_classname = "EmailProto"; - - -service EmailService { - rpc sendEmail(GrpcSendEmailRequest) returns (GrpcSendEmailResponse); -} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/postfach.model.proto b/vorgang-manager-interface/src/main/protobuf/postfach.model.proto deleted file mode 100644 index e87eec8e340a95af400bcfa5692cfafd8b9e10c2..0000000000000000000000000000000000000000 --- a/vorgang-manager-interface/src/main/protobuf/postfach.model.proto +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import "callcontext.proto"; -import "vorgang.model.proto"; -import "common.model.proto"; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.postfach"; -option java_outer_classname = "PostfachMailModelProto"; - -message GrpcSendPostfachMailRequest { - de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1; - string commandId = 2; - GrpcPostfachMail mail = 5; -} - -message GrpcSaveNachrichtDraftRequest { - string vorgangId = 1; - GrpcPostfachNachricht nachricht = 2; -} - -message GrpcSaveNachrichtDraftResponse { -} - -message GrpcSendPostfachMailResponse { -} - -message GrpcFindPostfachMailRequest { - de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1; - string nachrichtId = 2; -} - -message GrpcFindPostfachMailResponse { - GrpcPostfachMail nachricht = 1; -} - -message GrpcFindPostfachMailsRequest { - de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1; - string vorgangId = 2; -} - -message GrpcFindPostfachMailsResponse { - repeated GrpcPostfachMail mails = 1; -} - -enum GrpcDirection { - UNDEFINED = 0; - IN = 1; - OUT = 2; -} - -message GrpcPostfachNachricht { - string id = 1; - string createdAt = 2; - de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress postfachAddress = 3; - string subject = 4; - string mailBody = 5; - string replyOption = 6; - repeated string attachment = 7; -} - -message GrpcPostfachMail { - string id = 1; - string vorgangId = 2; - string postfachId = 3 [deprecated = true]; - GrpcPostfachAddress postfachAddress = 14; - string createdAt = 4; - string createdBy = 5; - string sentAt = 6; - bool sentSuccessful = 7; - string messageCode = 8; - GrpcDirection direction = 9; - string subject = 10; - string mailBody = 11; - string replyOption = 12; - repeated string attachment = 13; - GrpcPostfachAddress address = 15; -} - -message GrpcPostfachAddress { - string version = 1; - de.ozgcloud.vorgang.common.GrpcObject identifier = 2; - int32 type = 3; - string serviceKontoType = 4; -} - -message GrpcResendPostfachMailRequest { - de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1; - string commandId = 2; - string postfachMailId = 3; -} - -message GrpcResendPostfachMailResponse { -} - -message GrpcIsPostfachConfiguredRequest { - de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1; -} - -message GrpcIsPostfachConfiguredResponse { - bool isConfigured = 1; -} - -message GrpcGetPostfachConfigRequest { -} - -message GrpcGetPostfachConfigResponse { - bool configured = 1; - repeated GrpcPostfach postfach = 2; -} - -message GrpcPostfach { - string type = 1; - bool replyAllowed = 2; -} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/postfach.proto b/vorgang-manager-interface/src/main/protobuf/postfach.proto deleted file mode 100644 index 13cd376f935d32dba9640115894b6ba1bcf8efe2..0000000000000000000000000000000000000000 --- a/vorgang-manager-interface/src/main/protobuf/postfach.proto +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2022 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.nachrichten.postfach; - -import "postfach.model.proto"; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.postfach"; -option java_outer_classname = "MailProto"; - -service PostfachService { - rpc SaveNachrichtDraft(GrpcSaveNachrichtDraftRequest) returns (GrpcSaveNachrichtDraftResponse) { - } - - rpc SendPostfachMail(GrpcSendPostfachMailRequest) returns (GrpcSendPostfachMailResponse) { - } - - rpc FindPostfachMail(GrpcFindPostfachMailRequest) returns (GrpcFindPostfachMailResponse) { - } - - rpc FindPostfachMails(GrpcFindPostfachMailsRequest) returns (GrpcFindPostfachMailsResponse) { - } - - rpc ResendPostfachMail(GrpcResendPostfachMailRequest) returns (GrpcResendPostfachMailResponse) { - } - - rpc IsPostfachConfigured(GrpcIsPostfachConfiguredRequest) returns (GrpcIsPostfachConfiguredResponse) { - } - - rpc GetPostfachConfig(GrpcGetPostfachConfigRequest) returns (GrpcGetPostfachConfigResponse) { - } -} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto index 7719beb188b32fd0fdec649061e9844c5b7119e6..dc8cc1c5bc16b8277a61fd4b7741fc2fe921c924 100644 --- a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto +++ b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto @@ -138,6 +138,7 @@ message GrpcAntragsteller { string postfachId = 13 [deprecated = true]; GrpcFormData otherData = 30; + string firmaName = 31; } message GrpcFormData { diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index cdc3e660057ab9c6802a58676b672a5077e2cfef..a1cf7433e59147d9d2a9ad0bd427a77f7ffd5142 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.0.1-SNAPSHOT</version> + <version>4.1.0-SNAPSHOT</version> <relativePath /> </parent> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-server</artifactId> - <version>2.6.0-SNAPSHOT</version> + <version>2.7.0-SNAPSHOT</version> <name>OZG-Cloud Vorgang Manager Server</name> <description>Server Implementierung des VorgangManagers</description> @@ -53,9 +53,10 @@ <zufi-manager-interface.version>1.0.0-SNAPSHOT</zufi-manager-interface.version> <user-manager-interface.version>2.1.0</user-manager-interface.version> - <bescheid-manager.version>1.10.0-SNAPSHOT</bescheid-manager.version> - <processor-manager.version>0.4.0-SNAPSHOT</processor-manager.version> - <ozgcloud-starter.version>0.7.0-SNAPSHOT</ozgcloud-starter.version> + <bescheid-manager.version>1.11.0-SNAPSHOT</bescheid-manager.version> + <processor-manager.version>0.4.0</processor-manager.version> + <ozgcloud-starter.version>0.7.0</ozgcloud-starter.version> + <nachrichten-manager.version>2.7.0-SNAPSHOT</nachrichten-manager.version> <zip.version>2.11.1</zip.version> <jsoup.version>1.15.3</jsoup.version> @@ -66,6 +67,7 @@ <find-and-replace-maven-plugin.version>1.1.0</find-and-replace-maven-plugin.version> <docker-java.version>3.3.3</docker-java.version> + <shedlock.version>4.25.0</shedlock.version> </properties> <dependencies> @@ -78,8 +80,13 @@ <dependency> <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>nachrichten-manager</artifactId> - <version>${project.version}</version> + <artifactId>nachrichten-manager-postfach-interface</artifactId> + <version>${nachrichten-manager.version}</version> + </dependency> + <dependency> + <groupId>de.ozgcloud.nachrichten</groupId> + <artifactId>nachrichten-manager-interface</artifactId> + <version>${nachrichten-manager.version}</version> </dependency> <dependency> @@ -150,22 +157,6 @@ <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> - <!--only required for NachrichtenManager --> - <dependency> - <groupId>net.devh</groupId> - <artifactId>grpc-client-spring-boot-starter</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-freemarker</artifactId> - </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-webmvc</artifactId> - </dependency> - - <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> @@ -200,6 +191,16 @@ <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> </dependency> + <dependency> + <groupId>net.javacrumbs.shedlock</groupId> + <artifactId>shedlock-spring</artifactId> + <version>${shedlock.version}</version> + </dependency> + <dependency> + <groupId>net.javacrumbs.shedlock</groupId> + <artifactId>shedlock-provider-mongo</artifactId> + <version>${shedlock.version}</version> + </dependency> <dependency> <groupId>com.thedeanda</groupId> @@ -232,12 +233,6 @@ </dependency> <!-- Dev --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-devtools</artifactId> - <scope>runtime</scope> - <optional>true</optional> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> @@ -253,7 +248,7 @@ <!-- Test --> <dependency> <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>nachrichten-manager</artifactId> + <artifactId>nachrichten-manager-postfach-interface</artifactId> <version>${project.version}</version> <type>test-jar</type> <scope>test</scope> @@ -302,7 +297,11 @@ <artifactId>spring-ws-test</artifactId> <scope>test</scope> </dependency> - + <!-- TODO: delete wenn PersistPostfachNachrichtByCommandService ausgebaut--> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-mail</artifactId> + </dependency> <dependency> <groupId>org.junit.jupiter</groupId> diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemService.java index ba3e53ac5fcf412fa4b8b5a504cfe78651c06116..bd44ef4fce63620a80f042cb4a8e6f1c9f5eb5ea 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemService.java @@ -53,7 +53,8 @@ public class GrpcVorgangAttachedItemService extends VorgangAttachedItemServiceIm var vorgangAttachedItems = service.find(request.getVorgangId(), Optional.of(request.getClient()), Optional.of(request.getItemName())); - responseObserver.onNext(buildFindResponse(vorgangAttachedItems)); + var value = buildFindResponse(vorgangAttachedItems); + responseObserver.onNext(value); responseObserver.onCompleted(); } diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcBinaryFileService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcBinaryFileService.java index 0db0d205d8bb35e33c56431a3043672c02f8c02f..5f08813080ef2e7626b1994b6a77fbca97a9eb7b 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcBinaryFileService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcBinaryFileService.java @@ -35,7 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired; import com.google.protobuf.ByteString; -import de.ozgcloud.nachrichten.common.errorhandling.TechnicalException; +import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.vorgang.common.security.PolicyService; import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc.BinaryFileServiceImplBase; import de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFilesRequest; diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/Antragsteller.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/Antragsteller.java index 6eff50278dcb00f488850aecfe848d8105ce01a5..8d0cb86fd7edaee1461791fa10ad14be4444d64a 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/Antragsteller.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/Antragsteller.java @@ -33,6 +33,7 @@ import lombok.Getter; public class Antragsteller { private String anrede; + private String firmaName; private String nachname; private String vorname; private String geburtsdatum; diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java index b7a2ad373088f30562bdd8876f6931a6492fda7a..198115bf224f689f5836f5737fb3dc757d42d20a 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java @@ -61,12 +61,14 @@ import de.ozgcloud.common.test.DataITCase; import de.ozgcloud.document.BescheidDocumentCreatedEvent; import de.ozgcloud.document.Document; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; +import de.ozgcloud.nachrichten.postfach.PostfachRemoteService; import de.ozgcloud.vorgang.VorgangManagerServerApplication; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory; import de.ozgcloud.vorgang.command.CommandService; import de.ozgcloud.vorgang.command.CommandTestFactory; import de.ozgcloud.vorgang.command.CreateCommandRequest; +import de.ozgcloud.vorgang.servicekonto.PostfachAddressTestFactory; import de.ozgcloud.vorgang.status.StatusChangedEvent; import de.ozgcloud.vorgang.vorgang.Vorgang; import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; @@ -96,6 +98,8 @@ class BescheidEventListenerITCase { @Autowired private GridFsTemplate gridFsTemplate; + @MockBean + private PostfachRemoteService postfachRemoteService; @MockBean private CurrentUserService currentUserService; @Mock @@ -112,6 +116,7 @@ class BescheidEventListenerITCase { mongoOperations.dropCollection(Vorgang.COLLECTION_NAME); when(currentUserService.getUser()).thenReturn(callContextUser); when(currentUserService.getUserProfile()).thenReturn(userProfile); + when(postfachRemoteService.getPostfachType()).thenReturn("dummy"); } @Nested @@ -193,7 +198,7 @@ class BescheidEventListenerITCase { await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> { verify(bescheiTestEventListener).onBescheidSentEvent(bescheidSentEventCaptor.capture()); - assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SEND.name()); + assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name()); }); } @@ -255,6 +260,8 @@ class BescheidEventListenerITCase { private ArgumentCaptor<BescheidSentEvent> bescheidSentEventCaptor; @Captor private ArgumentCaptor<StatusChangedEvent> statusChangedEventCaptor; + @Captor + private ArgumentCaptor<PostfachNachricht> postfachNachrichtCaptor; @BeforeEach void init() { @@ -283,7 +290,7 @@ class BescheidEventListenerITCase { await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> { verify(bescheiTestEventListener).onBescheidSentEvent(bescheidSentEventCaptor.capture()); - assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SEND.name()); + assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name()); }); } @@ -302,18 +309,18 @@ class BescheidEventListenerITCase { } @Test - void shouldSaveNachrichtDraft() { + void shouldSendPostfachNachricht() { var vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build()).getId(); var bescheidItem = mongoOperations.save(createBescheidAttachedItemWithDocument(vorgangId)); commandService.createCommand(buildCreateCommandRequest(vorgangId, bescheidItem)); - await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> { - verify(bescheiTestEventListener).onBescheidSentEvent(bescheidSentEventCaptor.capture()); - assertThat(loadCommand(bescheidSentEventCaptor.getValue().getSource()).getStatus()).isEqualTo(CommandStatus.FINISHED); - var nachrichtDraft = loadNachricht(vorgangId); - assertThat(nachrichtDraft.getItem()).containsEntry(PostfachNachricht.FIELD_SUBJECT, NACHRICHT_SUBJECT); - assertThat(nachrichtDraft.getItem()).containsEntry(PostfachNachricht.FIELD_MAIL_BODY, NACHRICHT_TEXT); + await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> { + verify(postfachRemoteService).sendMessage(postfachNachrichtCaptor.capture()); + assertThat(postfachNachrichtCaptor.getValue().getPostfachId()).isEqualTo( + PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + assertThat(postfachNachrichtCaptor.getValue().getSubject()).isEqualTo(NACHRICHT_SUBJECT); + assertThat(postfachNachrichtCaptor.getValue().getMailBody()).isEqualTo(NACHRICHT_TEXT); }); } @@ -324,7 +331,7 @@ class BescheidEventListenerITCase { commandService.createCommand(buildCreateCommandRequest(vorgangId, bescheidItem)); - await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> { + await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> { verify(bescheiTestEventListener).onBescheidSentEvent(bescheidSentEventCaptor.capture()); assertThat(loadCommand(bescheidSentEventCaptor.getValue().getSource()).getStatus()).isEqualTo(CommandStatus.FINISHED); var vorgang = loadVorgang(vorgangId); @@ -354,7 +361,7 @@ class BescheidEventListenerITCase { .vorgangId(vorgangId) .relationId(bescheidItem.getId()) .relationVersion(bescheidItem.getVersion()) - .order(SEND_POSTFACH_MAIL_ORDER) + .order(SEND_BESCHEID_ORDER) .bodyObject(Map.of(BESCHEID_VOM_BODYKEY, "2024-01-01", GENEHMIGT_BODYKEY, true)) .build(); @@ -366,7 +373,7 @@ class BescheidEventListenerITCase { .vorgangId(vorgangId) .relationId(bescheidItem.getId()) .relationVersion(bescheidItem.getVersion()) - .order(SEND_POSTFACH_MAIL_ORDER) + .order(SEND_BESCHEID_ORDER) .bodyObject(Map.of(BESCHEID_VOM_BODYKEY, "2024-01-01", GENEHMIGT_BODYKEY, true)) .build(); @@ -384,14 +391,5 @@ class BescheidEventListenerITCase { return mongoOperations.findById(vorgangId, Vorgang.class); } - private VorgangAttachedItem loadNachricht(String vorgangId) { - var criteria = new Criteria().andOperator( - Criteria.where(VorgangAttachedItem.FIELDNAME_VORGANG_ID).is(vorgangId), - Criteria.where(VorgangAttachedItem.FIELDNAME_ITEM_NAME).is("PostfachMail") - ); - var vorgangAttachedItems = mongoOperations.find(Query.query(criteria), VorgangAttachedItem.class); - assertThat(vorgangAttachedItems).hasSize(1); - return vorgangAttachedItems.getFirst(); - } } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..4523bfa243ba39f5ef3fe4581cb2e883a39f4a36 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.bescheid; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.Map; + +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.test.annotation.DirtiesContext; + +import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub; +import de.ozgcloud.bescheid.attacheditem.AttachedItemService; +import de.ozgcloud.bescheid.common.callcontext.CallContextUser; +import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; +import de.ozgcloud.bescheid.common.callcontext.UserProfile; +import de.ozgcloud.common.test.DataITCase; +import de.ozgcloud.vorgang.VorgangManagerServerApplication; +import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; +import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory; +import de.ozgcloud.vorgang.vorgang.Vorgang; +import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; +import net.devh.boot.grpc.client.inject.GrpcClient; + +@SpringBootTest(classes = VorgangManagerServerApplication.class, properties = { + "grpc.server.inProcessName=test", + "grpc.server.port=-1", + "grpc.client.inProzess.address=in-process:test", + "grpc.client.vorgang-manager.address=in-process:test", +}) +@DataITCase +@DirtiesContext +class BescheidGrpcServiceITCase { + + @GrpcClient("inProzess") + private BescheidServiceBlockingStub bescheidServiceBlockingStub; + + @Autowired + private MongoOperations mongoOperations; + + @MockBean + private CurrentUserService currentUserService; + @Mock + private CallContextUser callContextUser; + @Mock + private UserProfile userProfile; + + @Nested + class TestFindAll { + + @BeforeEach + void init() { + mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME); + mongoOperations.dropCollection(Vorgang.COLLECTION_NAME); + when(currentUserService.getUser()).thenReturn(callContextUser); + when(currentUserService.getUserProfile()).thenReturn(userProfile); + } + + @Test + void shouldReturnSortedResult() { + var vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build()).getId(); + var bescheidItemFirstId = mongoOperations.save(createBescheidAttachedItem(vorgangId, "2022-10-01")).getId(); + var bescheidItemLastId = mongoOperations.save(createBescheidAttachedItem(vorgangId, "2024-01-01")).getId(); + + var response = bescheidServiceBlockingStub.getAll(GrpcGetAllBescheidRequest.newBuilder().setVorgangId(vorgangId).build()); + + assertThat(response.getBescheidList()).hasSize(2); + assertThat(response.getBescheidList().get(0).getId()).isEqualTo(bescheidItemLastId); + assertThat(response.getBescheidList().get(1).getId()).isEqualTo(bescheidItemFirstId); + } + + private VorgangAttachedItem createBescheidAttachedItem(String vorgangId, String beschiedenAm) { + return VorgangAttachedItemTestFactory.createBuilder() + .id(null) + .version(0L) + .vorgangId(vorgangId) + .itemName(AttachedItemService.BESCHEID_ITEM_NAME) + .client(BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME) + .item(Map.of( + Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name(), + Bescheid.FIELD_BESCHIEDEN_AM, beschiedenAm + )) + .build(); + } + + } + + @Nested + class TestGetConfig { + + @Test + void shouldReturnBescheidManagerConfig() { + var config = bescheidServiceBlockingStub.getConfig(GrpcBescheidManagerConfigRequest.newBuilder().build()); + + assertThat(config.getVersion()).isNotEmpty(); + assertThat(config.getJavaVersion()).isEqualTo(System.getProperty("java.version")); + assertThat(config.getFeatures().getCanCreateBescheidDocument()).isFalse(); + } + } + +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/AntragstellerTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/AntragstellerTestFactory.java index d21e22dc459fe019b62febb4a21352e6aed6f44c..86c84e32d5547a2341f4e04e9077d4ddf51c182b 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/AntragstellerTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/AntragstellerTestFactory.java @@ -32,6 +32,7 @@ public class AntragstellerTestFactory { public static final String ANREDE = "Herr"; public static final String NACHNAME = LoremIpsum.getInstance().getLastName(); + public static final String FIRMA_NAME = "Firma X"; public static final String VORNAME = LoremIpsum.getInstance().getFirstName(); public static final String GEBURTSDATUM = "1995-01-01"; public static final String GEBURTSORT = LoremIpsum.getInstance().getCountry(); @@ -56,6 +57,7 @@ public class AntragstellerTestFactory { public static Antragsteller.AntragstellerBuilder createBuilder() { return Antragsteller.builder() .anrede(ANREDE) + .firmaName(FIRMA_NAME) .nachname(NACHNAME) .vorname(VORNAME) .geburtsdatum(GEBURTSDATUM) diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcAntragstellerTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcAntragstellerTestFactory.java index 7285adac2106b40a5168f40f2182361c0796eb05..7a077b811aa2dd403138f458f7b6bad6970dadd3 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcAntragstellerTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcAntragstellerTestFactory.java @@ -52,6 +52,7 @@ public class GrpcAntragstellerTestFactory { public static GrpcAntragsteller.Builder createBuilder() { return GrpcAntragsteller.newBuilder() .setAnrede(ANREDE) + .setFirmaName(AntragstellerTestFactory.FIRMA_NAME) .setGeburtsdatum(GEBURTSDATUM) .setNachname(NACHNAME) .setVorname(VORNAME) diff --git a/vorgang-manager-utils/pom.xml b/vorgang-manager-utils/pom.xml index 872a39ff0092d600aed97486c2a38ffde0778865..24b78b3a4bf638fbc7ba91582fe1fed92a0a789f 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.0.1</version> + <version>4.1.0-SNAPSHOT</version> <relativePath/> </parent> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-utils</artifactId> <name>OZG-Cloud Vorgang Manager Utils</name> - <version>2.6.0-SNAPSHOT</version> + <version>2.7.0-SNAPSHOT</version> <properties> <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>