From 3e064c263f38e17fe46988eb41466686e50064c5 Mon Sep 17 00:00:00 2001 From: Felix Reichenbach <felix.reichenbach@mgm-tp.com> Date: Thu, 9 Jan 2025 14:38:57 +0100 Subject: [PATCH] OZG-7136 extend PostfachAddressIdentifier validation --- .../nachrichten/postfach/PostfachAddress.java | 4 +- .../postfach/StringBasedIdentifier.java | 3 ++ .../info/InfoManagerServiceTest.java | 3 +- ...rsistPostfachNachrichtServiceImplTest.java | 4 +- .../postfach/PostfachAddressTestFactory.java | 6 +-- .../postfach/PostfachEventListenerTest.java | 2 +- .../PostfachNachrichtTestFactory.java | 2 +- .../StringBasedIdentifierTestFactory.java | 40 +++++++++++++++++++ .../BayernIdPostfachRemoteServiceITCase.java | 12 ++++-- .../osi/OsiPostfachMessageMapperTest.java | 3 +- .../osi/OsiPostfachRemoteServiceITCase.java | 12 ++++-- 11 files changed, 70 insertions(+), 21 deletions(-) create mode 100644 nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifierTestFactory.java diff --git a/nachrichten-manager-postfach-interface/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java b/nachrichten-manager-postfach-interface/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java index 86ee9d4..e9831aa 100644 --- a/nachrichten-manager-postfach-interface/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java +++ b/nachrichten-manager-postfach-interface/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java @@ -23,8 +23,8 @@ */ package de.ozgcloud.nachrichten.postfach; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; import lombok.Builder; import lombok.Getter; @@ -43,7 +43,7 @@ public class PostfachAddress { private String version; private int type; - @NotNull + @Valid private PostfachAddressIdentifier identifier; @NotBlank private String serviceKontoType; diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java index 5be71d5..5724f86 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java @@ -23,6 +23,8 @@ */ package de.ozgcloud.nachrichten.postfach; +import jakarta.validation.constraints.NotBlank; + import lombok.Builder; import lombok.Getter; @@ -30,6 +32,7 @@ import lombok.Getter; @Getter public class StringBasedIdentifier implements PostfachAddressIdentifier { + @NotBlank private String postfachId; @Override diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java index 87daf33..55f8368 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java @@ -41,6 +41,7 @@ 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.StringBasedIdentifierTestFactory; import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; class InfoManagerServiceTest { @@ -134,7 +135,7 @@ class InfoManagerServiceTest { var id = service.getPostfachId(address); - assertThat(id).isEqualTo(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + assertThat(id).isEqualTo(StringBasedIdentifierTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); } @Test diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImplTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImplTest.java index d80fe36..9a65253 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImplTest.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImplTest.java @@ -467,7 +467,7 @@ class PersistPostfachNachrichtServiceImplTest { void shouldCallVorgangRemoteService() { doFindAnswers().toList(); - verify(vorgangService).findVorgangIds(serviceKontoType, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + verify(vorgangService).findVorgangIds(serviceKontoType, StringBasedIdentifierTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); } @Test @@ -485,7 +485,7 @@ class PersistPostfachNachrichtServiceImplTest { } private Stream<PostfachNachricht> doFindAnswers() { - return service.findAnswers(serviceKontoType, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE, + return service.findAnswers(serviceKontoType, StringBasedIdentifierTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE, GrpcPostfachMailTestFactory.REFERENCED_NACHRICHT_ID); } } diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java index 572b41d..e3458bb 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java @@ -23,14 +23,10 @@ */ 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 final static StringBasedIdentifier IDENTIFIER = StringBasedIdentifierTestFactory.create(); public static final String VERSION = "1.0"; public static PostfachAddress create() { diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java index 46a2e81..b38987c 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java @@ -146,7 +146,7 @@ class PostfachEventListenerTest { PostfachAddress.TYPE_FIELD, PostfachAddressTestFactory.TYPE, PostfachAddress.SERVICEKONTO_TYPE_FIELD, PostfachTestFactory.POSTFACH_TYPE, PostfachAddress.IDENTIFIER_FIELD, // - Map.of(PostfachAddress.FIELD_POSTFACH_ID, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE)), + Map.of(PostfachAddress.FIELD_POSTFACH_ID, StringBasedIdentifierTestFactory.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(), diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java index aec4cf7..6c4e1e5 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java @@ -104,6 +104,6 @@ public class PostfachNachrichtTestFactory { } private static Map<String, Object> getPostfachAddressIdentifierAsMap() { - return Map.of(PostfachAddress.FIELD_POSTFACH_ID, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + return Map.of(PostfachAddress.FIELD_POSTFACH_ID, StringBasedIdentifierTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); } } diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifierTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifierTestFactory.java new file mode 100644 index 0000000..7404e00 --- /dev/null +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifierTestFactory.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2025 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.nachrichten.postfach.StringBasedIdentifier.StringBasedIdentifierBuilder; +import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; + +public class StringBasedIdentifierTestFactory { + + public static final String STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE = MessageTestFactory.POSTFACH_ID; + + public static StringBasedIdentifier create() { + return createBuilder().build(); + } + + public static StringBasedIdentifierBuilder createBuilder() { + return StringBasedIdentifier.builder().postfachId(STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + } +} diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceITCase.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceITCase.java index 86f9e13..6b64dbc 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceITCase.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceITCase.java @@ -28,7 +28,6 @@ import static org.junit.jupiter.api.Assertions.*; import jakarta.validation.ConstraintViolationException; 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.springframework.beans.factory.annotation.Autowired; @@ -39,6 +38,7 @@ import de.ozgcloud.common.test.ITCase; import de.ozgcloud.nachrichten.email.EmailGrpcService; import de.ozgcloud.nachrichten.postfach.PostfachAddressTestFactory; import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; +import de.ozgcloud.nachrichten.postfach.StringBasedIdentifierTestFactory; @ITCase @SpringBootTest(properties = { "ozgcloud.bayernid.enabled = true" }) @@ -65,10 +65,14 @@ class BayernIdPostfachRemoteServiceITCase { assertThrows(ConstraintViolationException.class, () -> service.sendMessage(nachricht)); } - @Test - void shouldThrowConstraintViolationExceptionOnMissingIdentifier() { + @ParameterizedTest + @NullAndEmptySource + void shouldThrowConstraintViolationExceptionOnMissingIdentifier(String postfachId) { + var postfachAddress = PostfachAddressTestFactory.createBuilder() + .identifier(StringBasedIdentifierTestFactory.createBuilder().postfachId(postfachId).build()) + .build(); var nachricht = PostfachNachrichtTestFactory.createBuilder() - .postfachAddress(PostfachAddressTestFactory.createBuilder().identifier(null).build()) + .postfachAddress(postfachAddress) .build(); assertThrows(ConstraintViolationException.class, () -> service.sendMessage(nachricht)); diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java index 29255fb..48ff7d0 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java @@ -42,6 +42,7 @@ 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.nachrichten.postfach.StringBasedIdentifierTestFactory; import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; class OsiPostfachMessageMapperTest { @@ -163,7 +164,7 @@ class OsiPostfachMessageMapperTest { void shouldMapPostfachAddressToPostfachId() { var message = toOsiMessage(PostfachNachrichtTestFactory.create()); - assertThat(message.getPostfachId()).isEqualTo(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + assertThat(message.getPostfachId()).isEqualTo(StringBasedIdentifierTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); } } diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceITCase.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceITCase.java index ee9c037..2ddd91c 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceITCase.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceITCase.java @@ -28,7 +28,6 @@ import static org.junit.jupiter.api.Assertions.*; import jakarta.validation.ConstraintViolationException; 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.springframework.beans.factory.annotation.Autowired; @@ -40,6 +39,7 @@ import de.ozgcloud.common.test.ITCase; import de.ozgcloud.nachrichten.email.EmailGrpcService; import de.ozgcloud.nachrichten.postfach.PostfachAddressTestFactory; import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; +import de.ozgcloud.nachrichten.postfach.StringBasedIdentifierTestFactory; @ITCase @SpringBootTest(properties = { @@ -72,10 +72,14 @@ class OsiPostfachRemoteServiceITCase { assertThrows(ConstraintViolationException.class, () -> service.sendMessage(nachricht)); } - @Test - void shouldThrowConstraintViolationExceptionOnMissingIdentifier() { + @ParameterizedTest + @NullAndEmptySource + void shouldThrowConstraintViolationExceptionOnMissingIdentifier(String postfachId) { + var postfachAddress = PostfachAddressTestFactory.createBuilder() + .identifier(StringBasedIdentifierTestFactory.createBuilder().postfachId(postfachId).build()) + .build(); var nachricht = PostfachNachrichtTestFactory.createBuilder() - .postfachAddress(PostfachAddressTestFactory.createBuilder().identifier(null).build()) + .postfachAddress(postfachAddress) .build(); assertThrows(ConstraintViolationException.class, () -> service.sendMessage(nachricht)); -- GitLab