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