From 4387d35529add50fb62479262998461d192157d4 Mon Sep 17 00:00:00 2001
From: Jan Zickermann <jan.zickermann@dataport.de>
Date: Tue, 28 Jan 2025 12:12:45 +0100
Subject: [PATCH] OZG-4095 wiremock: Adjust factories and matching

---
 .../osiv2/OsiPostfachRemoteServiceITCase.java | 54 ++++++++-----------
 .../extension/OsiMockServerExtension.java     |  6 +++
 ...sageExchangeReceiveMessageTestFactory.java | 15 ++++++
 ...ngeReceiveMessagesResponseTestFactory.java | 13 +++++
 ...xchangeSendMessageResponseTestFactory.java | 13 +++++
 ...ry.java => V1ReplyMessageTestFactory.java} | 28 +++++-----
 .../osiv2/transfer/ResponseMapperTest.java    |  4 +-
 7 files changed, 84 insertions(+), 49 deletions(-)
 create mode 100644 src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/MessageExchangeReceiveMessageTestFactory.java
 create mode 100644 src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/MessageExchangeReceiveMessagesResponseTestFactory.java
 create mode 100644 src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/MessageExchangeSendMessageResponseTestFactory.java
 rename src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/{V1ReplyMessageFactory.java => V1ReplyMessageTestFactory.java} (51%)

diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java
index d20919e..1de65de 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java
@@ -4,8 +4,6 @@ import static com.github.tomakehurst.wiremock.client.WireMock.*;
 import static de.ozgcloud.nachrichten.postfach.osiv2.factory.JwtFactory.*;
 import static org.assertj.core.api.Assertions.*;
 
-import java.nio.file.Files;
-import java.nio.file.Path;
 import java.time.OffsetDateTime;
 import java.util.Arrays;
 import java.util.UUID;
@@ -28,11 +26,11 @@ import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import de.ozgcloud.nachrichten.postfach.osiv2.extension.Jwt;
 import de.ozgcloud.nachrichten.postfach.osiv2.extension.OsiMockServerExtension;
 import de.ozgcloud.nachrichten.postfach.osiv2.factory.JsonUtil;
+import de.ozgcloud.nachrichten.postfach.osiv2.factory.MessageExchangeReceiveMessageTestFactory;
+import de.ozgcloud.nachrichten.postfach.osiv2.factory.MessageExchangeReceiveMessagesResponseTestFactory;
+import de.ozgcloud.nachrichten.postfach.osiv2.factory.MessageExchangeSendMessageResponseTestFactory;
 import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachNachrichtTestFactory;
-import de.ozgcloud.nachrichten.postfach.osiv2.factory.V1ReplyMessageFactory;
-import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeReceiveMessage;
-import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeReceiveMessagesResponse;
-import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeSendMessageResponse;
+import de.ozgcloud.nachrichten.postfach.osiv2.factory.V1ReplyMessageTestFactory;
 import lombok.SneakyThrows;
 
 @SpringBootTest(classes = TestApplication.class)
@@ -45,11 +43,6 @@ class OsiPostfachRemoteServiceITCase {
 	@RegisterExtension
 	static final OsiMockServerExtension OSI_MOCK_SERVER_EXTENSION = new OsiMockServerExtension();
 
-	@SneakyThrows
-	private static String getPostfachApiSpec() {
-		return Files.readString(Path.of("spec", "postfach-api-facade.yaml"));
-	}
-
 	private final PostfachNachricht postfachNachricht = PostfachNachrichtTestFactory.create();
 
 	@Autowired
@@ -65,13 +58,11 @@ class OsiPostfachRemoteServiceITCase {
 	}
 
 	private WireMockServer postfachFacadeMockServer;
-	private WireMockServer serviceKontoMockServer;
 
 	@BeforeEach
 	@SneakyThrows
 	public void setup() {
 		postfachFacadeMockServer = OSI_MOCK_SERVER_EXTENSION.getPostfachFacadeMockServer();
-		serviceKontoMockServer = OSI_MOCK_SERVER_EXTENSION.getServiceKontoMockServer();
 	}
 
 	@DisplayName("should send request with jwt")
@@ -79,23 +70,19 @@ class OsiPostfachRemoteServiceITCase {
 	@SneakyThrows
 	void shouldSendRequestWithJwt() {
 		// Stub message send response (MessageExchangeApi::sendMessage)
-		postfachFacadeMockServer.stubFor(post("/MessageExchange/v1/Send/{mailboxId}")
-				.willReturn(okJsonObj(new MessageExchangeSendMessageResponse().messageId(UUID.randomUUID())))
+		postfachFacadeMockServer.stubFor(post(urlPathTemplate("/MessageExchange/v1/Send/{mailboxId}"))
+				.willReturn(
+						okJsonObj(
+								MessageExchangeSendMessageResponseTestFactory.create()
+										.messageId(UUID.randomUUID())
+						)
+				)
 		);
 
 		osiPostfachRemoteService.sendMessage(postfachNachricht);
 
-		serviceKontoMockServer.verify(
-				exactly(1),
-				postRequestedFor(urlEqualTo(OSI_MOCK_SERVER_EXTENSION.getAccessTokenUrl()))
-						.withHeader("Content-Type", equalTo("application/x-www-form-urlencoded"))
-						.withQueryParam("grant_type", equalTo("client_credentials"))
-						.withQueryParam("client_id", equalTo(CLIENT_ID))
-						.withQueryParam("scope", equalTo(String.join(" ", CLIENT_SCOPES)))
-						.withQueryParam("resource", equalTo(RESOURCE_URN))
-		);
 		var requests = postfachFacadeMockServer.findAll(
-				postRequestedFor(urlPathEqualTo("/MessageExchange/v1/Send")));
+				postRequestedFor(urlPathTemplate("/MessageExchange/v1/Send/{mailboxId}")));
 		assertThat(requests).hasSize(1);
 		var jwt = Jwt.parseAuthHeaderValue(requests.getFirst().getHeader("Authorization"));
 		assertThat(jwt.body().read("$.client_id", String.class)).isEqualTo(CLIENT_ID);
@@ -126,12 +113,14 @@ class OsiPostfachRemoteServiceITCase {
 
 	private void mockPostfachMessageAndResponse(final String... uuids) {
 		// Stub message listing response (MessageExchangeApi::receiveMessages)
-		postfachFacadeMockServer.stubFor(get("/MessageExchange/v1/Receive")
+		postfachFacadeMockServer.stubFor(get(urlPathEqualTo("/MessageExchange/v1/Receive"))
+				.withQueryParam("take", equalTo("100"))
+				.withQueryParam("skip", equalTo("0"))
 				.willReturn(
 						okJsonObj(
-								new MessageExchangeReceiveMessagesResponse()
+								MessageExchangeReceiveMessagesResponseTestFactory.create()
 										.messages(Arrays.stream(uuids)
-												.map(uuid -> new MessageExchangeReceiveMessage()
+												.map(uuid -> MessageExchangeReceiveMessageTestFactory.create()
 														.guid(UUID.fromString(uuid)))
 												.toList())
 						)
@@ -139,11 +128,11 @@ class OsiPostfachRemoteServiceITCase {
 		);
 		for (String uuid : uuids) {
 			// Stub individual response for message (MessageExchangeApi::getMessage)
-			postfachFacadeMockServer.stubFor(get("/MessageExchange/v1/Receive/{messageId}")
+			postfachFacadeMockServer.stubFor(get(urlPathTemplate("/MessageExchange/v1/Receive/{messageId}"))
 					.withPathParam("messageId", equalTo(uuid))
 					.willReturn(
 							okJsonObj(
-									V1ReplyMessageFactory.create()
+									V1ReplyMessageTestFactory.create()
 											.messageBox(UUID.fromString(uuid))
 											.responseTime(OffsetDateTime.now())
 							)
@@ -162,16 +151,15 @@ class OsiPostfachRemoteServiceITCase {
 	void shouldDeleteMessage() {
 		var messageId = "00000000-0000-0000-0000-000000000000";
 		// Stub delete message response (MessageExchangeApi::deleteMessage)
-		postfachFacadeMockServer.stubFor(delete("/MessageExchange/v1/Delete/{messageId}")
+		postfachFacadeMockServer.stubFor(delete(urlPathTemplate("/MessageExchange/v1/Delete/{messageId}"))
 				.willReturn(ok())
 		);
 
 		osiPostfachRemoteService.deleteMessage(messageId);
 
-
 		postfachFacadeMockServer.verify(
 				exactly(1),
-				deleteRequestedFor(urlPathEqualTo("/MessageExchange/v1/Delete/{messageId}"))
+				deleteRequestedFor(urlPathTemplate("/MessageExchange/v1/Delete/{messageId}"))
 						.withPathParam("messageId", equalTo(messageId))
 		);
 	}
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/OsiMockServerExtension.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/OsiMockServerExtension.java
index adf3e29..71cd29c 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/OsiMockServerExtension.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/OsiMockServerExtension.java
@@ -1,6 +1,7 @@
 package de.ozgcloud.nachrichten.postfach.osiv2.extension;
 
 import static com.github.tomakehurst.wiremock.client.WireMock.*;
+import static de.ozgcloud.nachrichten.postfach.osiv2.factory.JwtFactory.*;
 
 import org.junit.jupiter.api.extension.AfterAllCallback;
 import org.junit.jupiter.api.extension.AfterEachCallback;
@@ -62,6 +63,11 @@ public class OsiMockServerExtension implements BeforeAllCallback, AfterAllCallba
 	@Override
 	public void beforeEach(ExtensionContext context) {
 		serviceKontoMockServer.stubFor(post("/access-token")
+				.withHeader("Content-Type", equalTo("application/x-www-form-urlencoded"))
+				.withFormParam("grant_type", equalTo("client_credentials"))
+				.withFormParam("client_id", equalTo(CLIENT_ID))
+				.withFormParam("scope", equalTo(String.join(" ", CLIENT_SCOPES)))
+				.withFormParam("resource", equalTo(RESOURCE_URN))
 				.willReturn(okJson(JwtFactory.createTokenResponse(
 						JwtFactory.createAccessTokenExampleWithExpireIn(900)
 				))));
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/MessageExchangeReceiveMessageTestFactory.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/MessageExchangeReceiveMessageTestFactory.java
new file mode 100644
index 0000000..75a60a2
--- /dev/null
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/MessageExchangeReceiveMessageTestFactory.java
@@ -0,0 +1,15 @@
+package de.ozgcloud.nachrichten.postfach.osiv2.factory;
+
+import java.util.UUID;
+
+import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeReceiveMessage;
+
+public class MessageExchangeReceiveMessageTestFactory {
+
+	public static final UUID MESSAGE_ID = UUID.randomUUID();
+
+	public static MessageExchangeReceiveMessage create() {
+		return new MessageExchangeReceiveMessage()
+				.guid(MESSAGE_ID);
+	}
+}
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/MessageExchangeReceiveMessagesResponseTestFactory.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/MessageExchangeReceiveMessagesResponseTestFactory.java
new file mode 100644
index 0000000..8721bbb
--- /dev/null
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/MessageExchangeReceiveMessagesResponseTestFactory.java
@@ -0,0 +1,13 @@
+package de.ozgcloud.nachrichten.postfach.osiv2.factory;
+
+import java.util.List;
+
+import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeReceiveMessagesResponse;
+
+public class MessageExchangeReceiveMessagesResponseTestFactory {
+
+	public static MessageExchangeReceiveMessagesResponse create() {
+		return new MessageExchangeReceiveMessagesResponse()
+				.messages(List.of());
+	}
+}
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/MessageExchangeSendMessageResponseTestFactory.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/MessageExchangeSendMessageResponseTestFactory.java
new file mode 100644
index 0000000..0c296a6
--- /dev/null
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/MessageExchangeSendMessageResponseTestFactory.java
@@ -0,0 +1,13 @@
+package de.ozgcloud.nachrichten.postfach.osiv2.factory;
+
+import static de.ozgcloud.nachrichten.postfach.osiv2.factory.MessageExchangeReceiveMessageTestFactory.*;
+
+import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeSendMessageResponse;
+
+public class MessageExchangeSendMessageResponseTestFactory {
+
+	public static MessageExchangeSendMessageResponse create() {
+		return new MessageExchangeSendMessageResponse()
+				.messageId(MESSAGE_ID);
+	}
+}
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageFactory.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageTestFactory.java
similarity index 51%
rename from src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageFactory.java
rename to src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageTestFactory.java
index 61a52ac..244a643 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageFactory.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageTestFactory.java
@@ -7,22 +7,22 @@ import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1EidasLevel;
 import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyBehavior;
 import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyMessage;
 
-public class V1ReplyMessageFactory {
+public class V1ReplyMessageTestFactory {
 
-	private static String SEQUENCE_NUMMER = "OZG-Cloud-VorgangId";
-	private static String SUBJECT = "Das ist das Subject";
-	private static String BODY = """
+	private static final String SEQUENCE_NUMMER = "OZG-Cloud-VorgangId";
+	private static final String SUBJECT = "Das ist das Subject";
+	private static final String BODY = """
 			Das ist das Multiline
 			Body""";
-	private static String DISPLAY_NAME = "Das ist der Absender";
-	private static String ORIGIN_SENDER = "das ist der original Sender";
-	private static String REPLAY_ACTION = "Replypossible";
-	private static String EIDAS_LEVEL = "Low";
-	private static Boolean IS_OLIGATORY = Boolean.FALSE;
-	private static Boolean IS_HTML = Boolean.FALSE;
-	private static String GUID = "123-guid-456";
-	private static String MESSAGE_BOX = "Mailbox-Id-Antwortender";
-	private static OffsetDateTime RESPONSE_TIME = OffsetDateTime.now();
+	private static final String DISPLAY_NAME = "Das ist der Absender";
+	private static final String ORIGIN_SENDER = "das ist der original Sender";
+	private static final String REPLAY_ACTION = "Replypossible";
+	private static final String EIDAS_LEVEL = "Low";
+	private static final Boolean IS_OBLIGATORY = Boolean.FALSE;
+	private static final Boolean IS_HTML = Boolean.FALSE;
+	private static final String GUID = "123-guid-456";
+	private static final String MESSAGE_BOX = "Mailbox-Id-Antwortender";
+	private static final OffsetDateTime RESPONSE_TIME = OffsetDateTime.now();
 
 	public static V1ReplyMessage create() {
 		return new V1ReplyMessage()
@@ -33,7 +33,7 @@ public class V1ReplyMessageFactory {
 				.originSender(ORIGIN_SENDER)
 				.replyAction(V1ReplyBehavior.fromValue(REPLAY_ACTION))
 				.eidasLevel(V1EidasLevel.fromValue(EIDAS_LEVEL))
-				.isObligatory(IS_OLIGATORY)
+				.isObligatory(IS_OBLIGATORY)
 				.isHtml(IS_HTML)
 				.guid(UUID.nameUUIDFromBytes(GUID.getBytes()))
 				.messageBox(UUID.nameUUIDFromBytes(MESSAGE_BOX.getBytes()))
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapperTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapperTest.java
index d4c8706..c45f08e 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapperTest.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapperTest.java
@@ -13,14 +13,14 @@ import org.mapstruct.factory.Mappers;
 import org.mockito.InjectMocks;
 
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.osiv2.factory.V1ReplyMessageFactory;
+import de.ozgcloud.nachrichten.postfach.osiv2.factory.V1ReplyMessageTestFactory;
 import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyMessage;
 
 class ResponseMapperTest {
 
 	@InjectMocks
 	private ResponseMapper mapper = Mappers.getMapper(ResponseMapper.class);
-	private V1ReplyMessage message = V1ReplyMessageFactory.create();
+	private V1ReplyMessage message = V1ReplyMessageTestFactory.create();
 
 	@DisplayName("map V1ReplyMessage to PostfachNachricht")
 	@Nested
-- 
GitLab