diff --git a/pom.xml b/pom.xml index 12802c88bda7ee8a0ad01701ce78443c3707c2a0..0ad473059d7eae8d8dbd84e88a1cde083cdc9a0d 100644 --- a/pom.xml +++ b/pom.xml @@ -11,17 +11,17 @@ <groupId>de.ozgcloud.osiv2</groupId> <artifactId>osiv2-postfach</artifactId> - <version>0.1.1-SNAPSHOT</version> + <version>0.1.0-SNAPSHOT</version> <name>OZG-Cloud-OSIv2-Postfach</name> <description>OSIv2-Postfach-Anbindung für OZG-Cloud-Nachrichten</description> <properties> - <api-lib.version>0.14.0</api-lib.version> - <nachrichten-manager.version>2.14.0</nachrichten-manager.version> - <mockserver-client.version>5.15.0</mockserver-client.version> + <api-lib.version>0.16.0</api-lib.version> + <nachrichten-manager.version>2.17.0-SNAPSHOT</nachrichten-manager.version> <openapi-generator.version>7.10.0</openapi-generator.version> <swagger-parser.version>2.1.23</swagger-parser.version> + <wiremock-spring-boot.version>3.6.0</wiremock-spring-boot.version> </properties> <dependencies> <!-- OZG-Cloud --> @@ -49,7 +49,6 @@ <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> - <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> @@ -75,18 +74,14 @@ <version>${testcontainers.version}</version> <scope>test</scope> </dependency> + <dependency> - <groupId>org.mock-server</groupId> - <artifactId>mockserver-client-java</artifactId> - <version>${mockserver-client.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>mockserver</artifactId> - <scope>test</scope> + <groupId>org.wiremock.integrations</groupId> + <artifactId>wiremock-spring-boot</artifactId> + <version>${wiremock-spring-boot.version}</version> </dependency> + <!-- commons --> <dependency> <groupId>org.apache.commons</groupId> diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java index 89761838c98336a31ca91d874373d5efa68792d1..c03d4e681f51ff7a38fb4741ac21e92e187638e6 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java @@ -7,16 +7,19 @@ import org.springframework.stereotype.Service; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; import de.ozgcloud.nachrichten.postfach.PostfachRemoteService; +import de.ozgcloud.nachrichten.postfach.osiv2.config.Osi2PostfachProperties; import de.ozgcloud.nachrichten.postfach.osiv2.transfer.PostfachApiFacadeService; +import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @Service -@ConditionalOnProperty("ozgcloud.osiv2.enabled") +@ConditionalOnProperty(prefix = Osi2PostfachProperties.PREFIX, name = "enabled", havingValue = "true") @Log4j2 -public record OsiPostfachRemoteService( - PostfachApiFacadeService postfachApiFacadeService -) implements PostfachRemoteService { - public static final String POSTFACH_TYPE_OSI = "OSIV2"; +@RequiredArgsConstructor +public class OsiPostfachRemoteService implements PostfachRemoteService { + private final PostfachApiFacadeService postfachApiFacadeService; + + public static final String POSTFACH_TYPE_OSI = "OSI"; @Override public void sendMessage(PostfachNachricht nachricht) { @@ -31,7 +34,7 @@ public record OsiPostfachRemoteService( public Stream<PostfachNachricht> getAllMessages() { try { return postfachApiFacadeService.receiveMessages(); - }catch (RuntimeException e) { + } catch (RuntimeException e) { throw new OsiPostfachException("Failed to get messages", e); } } diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/ApiClientConfiguration.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/ApiClientConfiguration.java index 9461adf1ce8b2cd24e67761d643680130f2a5f53..a0d414ec0f8b44661bc2a9dd1dda47983f17eb66 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/ApiClientConfiguration.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/ApiClientConfiguration.java @@ -1,8 +1,5 @@ package de.ozgcloud.nachrichten.postfach.osiv2.config; -import de.ozgcloud.nachrichten.postfach.osiv2.gen.ApiClient; -import de.ozgcloud.nachrichten.postfach.osiv2.gen.api.MessageExchangeApi; -import lombok.RequiredArgsConstructor; import org.apache.hc.client5.http.auth.AuthScope; import org.apache.hc.client5.http.auth.UsernamePasswordCredentials; import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider; @@ -28,14 +25,18 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestClient; +import de.ozgcloud.nachrichten.postfach.osiv2.gen.ApiClient; +import de.ozgcloud.nachrichten.postfach.osiv2.gen.api.MessageExchangeApi; +import lombok.RequiredArgsConstructor; + @Configuration @EnableWebSecurity @RequiredArgsConstructor -@ConditionalOnProperty("ozgcloud.osiv2.enabled") +@ConditionalOnProperty(prefix = Osi2PostfachProperties.PREFIX, name = "enabled", havingValue = "true") public class ApiClientConfiguration { - private final OsiPostfachProperties.ApiConfiguration apiConfiguration; - private final OsiPostfachProperties.ProxyConfiguration proxyConfiguration; + private final Osi2PostfachProperties.ApiConfiguration apiConfiguration; + private final Osi2PostfachProperties.ProxyConfiguration proxyConfiguration; @Bean MessageExchangeApi messageExchangeApi(ApiClient apiClient) { @@ -43,16 +44,14 @@ public class ApiClientConfiguration { } @Bean - ApiClient apiClient(RestClient restClient) { - var apiClient = new ApiClient(restClient); + ApiClient apiClient(ClientRegistrationRepository clientRegistrations) { + var apiClient = new ApiClient(restClient(clientRegistrations)); apiClient.setBasePath(apiConfiguration.getUrl()); return apiClient; } - @Bean - public RestClient restClient(ClientRegistrationRepository clientRegistrations) { - OAuth2ClientHttpRequestInterceptor requestInterceptor = - new OAuth2ClientHttpRequestInterceptor(authorizedClientManager(clientRegistrations)); + private RestClient restClient(ClientRegistrationRepository clientRegistrations) { + var requestInterceptor = new OAuth2ClientHttpRequestInterceptor(authorizedClientManager(clientRegistrations)); requestInterceptor.setClientRegistrationIdResolver(request -> "osi2"); return defaultRestClientBuilder() diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/OsiPostfachProperties.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/Osi2PostfachProperties.java similarity index 62% rename from src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/OsiPostfachProperties.java rename to src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/Osi2PostfachProperties.java index 5d1df86ea4cefa8fc177ffe8545273de464fd4c8..81ef4623dcd53c1d2ab13b03c5b233bd79de5386 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/OsiPostfachProperties.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/Osi2PostfachProperties.java @@ -2,28 +2,35 @@ package de.ozgcloud.nachrichten.postfach.osiv2.config; import jakarta.annotation.Nullable; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import lombok.Getter; +import lombok.RequiredArgsConstructor; import lombok.Setter; @Getter @Setter @Configuration -@ConfigurationProperties(prefix = OsiPostfachProperties.PREFIX) -public class OsiPostfachProperties { +@ConditionalOnProperty(prefix = Osi2PostfachProperties.PREFIX, name = "enabled", havingValue = "true") +@RequiredArgsConstructor +public class Osi2PostfachProperties { - static final String PREFIX = "ozgcloud.osiv2"; + public static final String PREFIX = "ozgcloud.osiv2"; private boolean enabled; + private final ApiConfiguration api; + + private final ProxyConfiguration httpProxy; + @Getter @Setter @Configuration @ConfigurationProperties(prefix = ApiConfiguration.PREFIX) - static class ApiConfiguration { - static final String PREFIX = OsiPostfachProperties.PREFIX + ".api"; + public static class ApiConfiguration { + public static final String PREFIX = Osi2PostfachProperties.PREFIX + ".api"; private String resource; private String url; @@ -39,8 +46,8 @@ public class OsiPostfachProperties { @Setter @Configuration @ConfigurationProperties(prefix = ProxyConfiguration.PREFIX) - static class ProxyConfiguration { - static final String PREFIX = OsiPostfachProperties.PREFIX + ".proxy"; + public static class ProxyConfiguration { + public static final String PREFIX = Osi2PostfachProperties.PREFIX + ".proxy"; private boolean enabled; diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapper.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2RequestMapper.java similarity index 98% rename from src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapper.java rename to src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2RequestMapper.java index c9a42ae3fa9756dfe2ac34d20bfd73405f85a5fe..4b1482c4efeb283320bd9abace07dc89da77f52f 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapper.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2RequestMapper.java @@ -17,7 +17,7 @@ import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1References; import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyBehavior; @Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR) -public interface RequestMapper { +public interface Osi2RequestMapper { @Mapping(target = "sequencenumber", source = "vorgangId") @Mapping(target = "body", source = "mailBody") diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapper.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2ResponseMapper.java similarity index 97% rename from src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapper.java rename to src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2ResponseMapper.java index 84a1b80ce2f3ac508b39ce35bd9c52edc6f5ce4b..f5acb80a874aed8cf323aca797cbc5488f7846f5 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapper.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2ResponseMapper.java @@ -1,7 +1,6 @@ package de.ozgcloud.nachrichten.postfach.osiv2.transfer; import java.time.ZoneOffset; -import java.time.format.DateTimeFormatter; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -17,7 +16,7 @@ import lombok.Builder; import lombok.Getter; @Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, imports = ZoneOffset.class) -public interface ResponseMapper { +public interface Osi2ResponseMapper { String POSTFACH_ADDRESS_VERSION = "2.0"; int POSTFACH_ADDRESS_TYPE = 2; diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java index c815b32ed002daf1ddb9d0da2bb35a02300a5df7..d11c556369fb8c3a892d1be7c46476c0b7298ca6 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java @@ -1,5 +1,7 @@ package de.ozgcloud.nachrichten.postfach.osiv2.transfer; +import java.util.Collection; +import java.util.Optional; import java.util.UUID; import java.util.stream.Stream; @@ -7,31 +9,42 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; +import de.ozgcloud.nachrichten.postfach.osiv2.config.Osi2PostfachProperties; import de.ozgcloud.nachrichten.postfach.osiv2.gen.api.MessageExchangeApi; import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeReceiveMessage; +import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @Log4j2 @Service -@ConditionalOnProperty("ozgcloud.osiv2.enabled") -public record PostfachApiFacadeService(MessageExchangeApi messageExchangeApi, RequestMapper requestMapper, ResponseMapper responseMapper) { +@ConditionalOnProperty(prefix = Osi2PostfachProperties.PREFIX, name = "enabled", havingValue = "true") +@RequiredArgsConstructor +public class PostfachApiFacadeService { + + private final MessageExchangeApi messageExchangeApi; + private final Osi2RequestMapper osi2RequestMapper; + private final Osi2ResponseMapper osi2ResponseMapper; + + private static final int MAX_NUMBER_RECEIVED_MESSAGES = 100; - private static int MAX_NUMBER_RECEIVED_MESSAGES = 100; public void sendMessage(PostfachNachricht nachricht) { messageExchangeApi.sendMessage( - requestMapper.mapMailboxId(nachricht), - requestMapper.mapOutSendMessageRequestV2(nachricht) + osi2RequestMapper.mapMailboxId(nachricht), + osi2RequestMapper.mapOutSendMessageRequestV2(nachricht) ); } public Stream<PostfachNachricht> receiveMessages() { var response = messageExchangeApi.receiveMessages(MAX_NUMBER_RECEIVED_MESSAGES, 0); - return response.getMessages().stream().map(this::fetchMessageByGuid); + return Optional.ofNullable(response.getMessages()) + .stream() + .flatMap(Collection::stream) + .map(this::fetchMessageByGuid); } PostfachNachricht fetchMessageByGuid(final MessageExchangeReceiveMessage message) { var messageReply = messageExchangeApi.getMessage(message.getGuid()); - return responseMapper.toPostfachNachricht(messageReply); + return osi2ResponseMapper.toPostfachNachricht(messageReply); } public void deleteMessage(final String messageId) { diff --git a/src/main/resources/application-stage.yml b/src/main/resources/application-stage.yml new file mode 100644 index 0000000000000000000000000000000000000000..c2804acf5bd4bec3a1e037f7cf334c73b2905050 --- /dev/null +++ b/src/main/resources/application-stage.yml @@ -0,0 +1,26 @@ +spring: + security: + oauth2: + client: + registration: + osi2: + client-id: 'OZG-Kopfstelle' + client-secret: 'changeme' + scope: default, access_urn:dataport:osi:sh:stage:ozgkopfstelle + authorization-grant-type: 'client_credentials' + client-authentication-method: client_secret_post + provider: + osi2: + token-uri: 'https://idp.serviceportal-stage.schleswig-holstein.de/webidp2/connect/token' +ozgcloud: + osiv2: + enabled: false + api: + resource: 'urn:dataport:osi:postfach:rz2:stage:sh' + url: 'https://api-gateway-stage.dataport.de:443/api/osi_postfach/1.0.0' + tenant: 'SH' + name-identifier: 'ozgkopfstelle' + proxy: + enabled: true + host: 127.0.0.1 + port: 3128 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e9a716309c13d9d5b2f5c35401dfaead0e6f5b2c..065fffe83bf04cd7a435ee3d7a96b347b2f9379e 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,28 +1,3 @@ spring: jackson: - default-property-inclusion: NON_NULL - security: - oauth2: - client: - registration: - osi2: - client-id: 'OZG-Kopfstelle' - client-secret: 'changeme' - scope: default, access_urn:dataport:osi:sh:stage:ozgkopfstelle - authorization-grant-type: 'client_credentials' - client-authentication-method: client_secret_post - provider: - osi2: - token-uri: 'https://idp.serviceportal-stage.schleswig-holstein.de/webidp2/connect/token' -ozgcloud: - osiv2: - enabled: true - api: - resource: 'urn:dataport:osi:postfach:rz2:stage:sh' - url: 'https://api-gateway-stage.dataport.de:443/api/osi_postfach/1.0.0' - tenant: 'SH' - name-identifier: 'ozgkopfstelle' - proxy: - enabled: true - host: 127.0.0.1 - port: 3128 + default-property-inclusion: NON_NULL \ No newline at end of file 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 a99d657d13afe1860ddd9532548ca37dc0c3fa58..0acee01ecdbf9d81f5ce6d8d565300107d75c0e3 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java @@ -1,27 +1,17 @@ package de.ozgcloud.nachrichten.postfach.osiv2; +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 static org.junit.jupiter.api.Assertions.*; -import static org.mockserver.mock.OpenAPIExpectation.*; -import static org.mockserver.model.HttpRequest.*; -import static org.mockserver.model.HttpResponse.*; -import java.nio.file.Files; -import java.nio.file.Path; import java.time.OffsetDateTime; import java.util.Arrays; -import java.util.Map; import java.util.UUID; -import de.ozgcloud.nachrichten.postfach.osiv2.factory.JsonUtil; -import de.ozgcloud.nachrichten.postfach.osiv2.factory.V1ReplyMessageFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; -import org.mockserver.client.MockServerClient; -import org.mockserver.model.OpenAPIDefinition; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; @@ -29,20 +19,26 @@ import org.springframework.test.context.DynamicPropertyRegistry; import org.springframework.test.context.DynamicPropertySource; import org.springframework.test.context.TestPropertySource; +import com.github.tomakehurst.wiremock.WireMockServer; +import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; + 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.gen.model.MessageExchangeReceiveMessage; -import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeReceiveMessagesResponse; +import de.ozgcloud.nachrichten.postfach.osiv2.factory.V1ReplyMessageTestFactory; import lombok.SneakyThrows; @SpringBootTest(classes = TestApplication.class) -@ActiveProfiles("itcase") +@ActiveProfiles({ "stage", "itcase" }) @TestPropertySource(properties = { "ozgcloud.osiv2.proxy.enabled=false", }) -public class OsiPostfachRemoteServiceITCase { +class OsiPostfachRemoteServiceITCase { @RegisterExtension static final OsiMockServerExtension OSI_MOCK_SERVER_EXTENSION = new OsiMockServerExtension(); @@ -61,96 +57,49 @@ public class OsiPostfachRemoteServiceITCase { registry.add("ozgcloud.osiv2.api.resource", () -> RESOURCE_URN); } - private MockServerClient postfachFacadeMockClient; - - @SneakyThrows - private void mockOperationsAndResponses(Map<String, String> operationsAndResponses) { - postfachFacadeMockClient.upsert( - openAPIExpectation() - .withSpecUrlOrPayload(Files.readString(Path.of("spec", "postfach-api-facade.yaml"))) - .withOperationsAndResponses(Map.of( - "deleteMessage", "200" - )) - .withSpecUrlOrPayload(getPostfachApiSpec()) - .withOperationsAndResponses(operationsAndResponses) - ); - } - - @SneakyThrows - private static String getPostfachApiSpec() { - return Files.readString(Path.of("spec", "postfach-api-facade.yaml")); - } - - private void mockPostfachMessageAndResponse(final String... uuids) { - // Stub message listing response - mockJsonOperation("receiveMessages", new MessageExchangeReceiveMessagesResponse() - .messages(Arrays.stream(uuids) - .map(uuid -> new MessageExchangeReceiveMessage() - .guid(UUID.fromString(uuid))) - .toList())); - for (String uuid : uuids) { - // Stub individual response for message - mockJsonOperation("getMessage", V1ReplyMessageFactory.create() - .messageBox(UUID.fromString(uuid)) - .responseTime(OffsetDateTime.now())); - } - } - - private void mockJsonOperation(final String operationId, final Object body) { - postfachFacadeMockClient - .when( - new OpenAPIDefinition() - .withSpecUrlOrPayload(getPostfachApiSpec()) - .withOperationId(operationId) - ) - .respond( - response() - .withHeader("Content-type", "application/json") - .withBody(JsonUtil.toJson(body)) - ); - } + private WireMockServer postfachFacadeMockServer; - - @BeforeEach + @BeforeEach @SneakyThrows public void setup() { - postfachFacadeMockClient = OSI_MOCK_SERVER_EXTENSION.getPostfachFacadeMockClient(); + postfachFacadeMockServer = OSI_MOCK_SERVER_EXTENSION.getPostfachFacadeMockServer(); } - - @DisplayName("should send dummy request with jwt") + @DisplayName("should send request with jwt") @Test @SneakyThrows void shouldSendRequestWithJwt() { - mockOperationsAndResponses(Map.of( - "SendMessage", "200" - )); + // Stub message send response (MessageExchangeApi::sendMessage) + postfachFacadeMockServer.stubFor(post(urlPathTemplate("/MessageExchange/v1/Send/{mailboxId}")) + .willReturn( + okJsonObj( + MessageExchangeSendMessageResponseTestFactory.create() + .messageId(UUID.randomUUID()) + ) + ) + ); osiPostfachRemoteService.sendMessage(postfachNachricht); - var requests = postfachFacadeMockClient.retrieveRecordedRequests(request()); + var requests = postfachFacadeMockServer.findAll( + postRequestedFor(urlPathTemplate("/MessageExchange/v1/Send/{mailboxId}"))); assertThat(requests).hasSize(1); - var jwt = Jwt.parseAuthHeaderValue( - requests[0].getHeader("Authorization").getFirst() - ); + var jwt = Jwt.parseAuthHeaderValue(requests.getFirst().getHeader("Authorization")); assertThat(jwt.body().read("$.client_id", String.class)).isEqualTo(CLIENT_ID); assertThat(jwt.body().read("$.aud", String.class)).isEqualTo(RESOURCE_URN); } - @DisplayName("should receive one messages") @Test @SneakyThrows void shouldReceiveMessages() { mockPostfachMessageAndResponse("00000000-0000-0000-0000-000000000000"); - var messageStream = osiPostfachRemoteService.getAllMessages(); + var messageList = osiPostfachRemoteService.getAllMessages().toList(); - var messageList = messageStream.toList(); - assertThat(messageList).size().isEqualTo(1); + assertThat(messageList).hasSize(1); } - @DisplayName("should receive two messages") @Test @SneakyThrows @@ -162,24 +111,57 @@ public class OsiPostfachRemoteServiceITCase { assertThat(messageList).hasSize(2); } + private void mockPostfachMessageAndResponse(final String... uuids) { + // Stub message listing response (MessageExchangeApi::receiveMessages) + postfachFacadeMockServer.stubFor(get(urlPathEqualTo("/MessageExchange/v1/Receive")) + .withQueryParam("take", equalTo("100")) + .withQueryParam("skip", equalTo("0")) + .willReturn( + okJsonObj( + MessageExchangeReceiveMessagesResponseTestFactory.create() + .messages(Arrays.stream(uuids) + .map(uuid -> MessageExchangeReceiveMessageTestFactory.create() + .guid(UUID.fromString(uuid))) + .toList()) + ) + ) + ); + for (String uuid : uuids) { + // Stub individual response for message (MessageExchangeApi::getMessage) + postfachFacadeMockServer.stubFor(get(urlPathTemplate("/MessageExchange/v1/Receive/{messageId}")) + .withPathParam("messageId", equalTo(uuid)) + .willReturn( + okJsonObj( + V1ReplyMessageTestFactory.create() + .messageBox(UUID.fromString(uuid)) + .responseTime(OffsetDateTime.now()) + ) + ) + ); + } + } + + private ResponseDefinitionBuilder okJsonObj(final Object body) { + return okJson(JsonUtil.toJson(body)); + } @DisplayName("should delete message") @Test @SneakyThrows void shouldDeleteMessage() { - mockOperationsAndResponses(Map.of( - "deleteMessage", "200" - )); - - assertDoesNotThrow(() -> osiPostfachRemoteService.deleteMessage("00000000-0000-0000-0000-000000000000")); - - var requests = postfachFacadeMockClient.retrieveRecordedRequests(request()); + var messageId = "00000000-0000-0000-0000-000000000000"; + // Stub delete message response (MessageExchangeApi::deleteMessage) + postfachFacadeMockServer.stubFor(delete(urlPathTemplate("/MessageExchange/v1/Delete/{messageId}")) + .willReturn(ok()) + ); - assertThat(requests[0].getMethod()).isEqualTo("DELETE"); - assertThat(requests[0].getPath()).isEqualTo("/MessageExchange/v1/Delete/00000000-0000-0000-0000-000000000000"); + osiPostfachRemoteService.deleteMessage(messageId); + postfachFacadeMockServer.verify( + exactly(1), + deleteRequestedFor(urlPathTemplate("/MessageExchange/v1/Delete/{messageId}")) + .withPathParam("messageId", equalTo(messageId)) + ); } - - } diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceRemoteITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceRemoteITCase.java index 778e843e5754290f41e1c8f66e299440a99b44a0..be0f329f70b0c21b27b6fadf053334f948b37c15 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceRemoteITCase.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceRemoteITCase.java @@ -6,7 +6,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Stream; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -23,7 +22,7 @@ import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachAddressTestFactory import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachNachrichtTestFactory; @SpringBootTest(classes = TestApplication.class) -@ActiveProfiles("local") +@ActiveProfiles({ "stage", "itcase" }) @EnabledIfEnvironmentVariable(named = "SH_STAGE_CLIENT_SECRET", matches = ".+") public class OsiPostfachRemoteServiceRemoteITCase { @@ -77,22 +76,24 @@ public class OsiPostfachRemoteServiceRemoteITCase { @DisplayName("receive all messages") @Nested - class TestReceiveAllMessages{ + class TestReceiveAllMessages { @Test - void shouldReceiveAllMessage(){ + void shouldReceiveAllMessage() { Stream<PostfachNachricht> allMessages = osiPostfachRemoteService.getAllMessages(); + var messages = allMessages.toList(); - assertThat(messages.size() > 0); + + assertThat(messages).isNotEmpty(); } } @DisplayName("delete message") @Nested - class TestDeleteMessageById{ + class TestDeleteMessageById { @Test - void shouldDeleteMessage(){ + void shouldDeleteMessage() { assertThatCode(() -> osiPostfachRemoteService.deleteMessage("5dd65c1e-bd41-4c3d-bf98-be769ca341dc")) .doesNotThrowAnyException(); } diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceTest.java index a00ab88ae8b7d18aa79a228c651d55ff472a8289..685c36f61dd8d1d44afc185da5bf94bf3eb4ee67 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceTest.java @@ -81,6 +81,7 @@ class OsiPostfachRemoteServiceTest { verify(postfachApiFacadeService).deleteMessage(any()); } + @DisplayName("should throw osi postfach exception on runtime exception") @Test void shouldThrowOsiPostfachExceptionOnRuntimeException() { diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/Jwt.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/Jwt.java index 327c91effe0823e3d7fb7c41e3a7a2c706a11eac..b8e053c748b1c731eadbfd0e63780775ba136c8f 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/Jwt.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/Jwt.java @@ -5,7 +5,7 @@ import static de.ozgcloud.nachrichten.postfach.osiv2.factory.JsonUtil.*; import java.io.Serializable; import java.util.Map; -import org.bouncycastle.util.encoders.Base64; +import org.testcontainers.shaded.org.bouncycastle.util.encoders.Base64; import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.ReadContext; 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 9d59d950c805922702d0a18bf38cbdb30e6c3a5c..71cd29cbd57f980c253f593a8c1a30f8286e38a4 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,22 +1,15 @@ 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 static org.mockserver.matchers.Times.*; -import static org.mockserver.model.Header.*; -import static org.mockserver.model.HttpRequest.*; -import static org.mockserver.model.HttpResponse.*; -import static org.mockserver.model.Parameter.*; -import static org.mockserver.model.ParameterBody.*; import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.AfterEachCallback; import org.junit.jupiter.api.extension.BeforeAllCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; -import org.mockserver.client.MockServerClient; -import org.testcontainers.containers.MockServerContainer; -import org.testcontainers.containers.output.OutputFrame; -import org.testcontainers.utility.DockerImageName; + +import com.github.tomakehurst.wiremock.WireMockServer; import de.ozgcloud.nachrichten.postfach.osiv2.factory.JwtFactory; import lombok.Getter; @@ -28,25 +21,8 @@ import lombok.extern.log4j.Log4j2; @RequiredArgsConstructor public class OsiMockServerExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback { - private MockServerClient serviceKontoMockClient; - private MockServerClient postfachFacadeMockClient; - - private static final DockerImageName MOCK_SERVER_IMAGE = DockerImageName.parse("mockserver/mockserver") - .withTag("mockserver-5.15.0"); - - private final MockServerContainer serviceKontoMockContainer = new MockServerContainer(MOCK_SERVER_IMAGE) - .withLogConsumer(this::logContainerOutput); - private final MockServerContainer postfachFacadeMockContainer = new MockServerContainer(MOCK_SERVER_IMAGE) - .withLogConsumer(this::logContainerOutput); - - private void logContainerOutput(OutputFrame outputFrame) { - var line = outputFrame.getUtf8String().stripTrailing(); - if (outputFrame.getType() == OutputFrame.OutputType.STDERR) { - System.err.println(line); - } else { - System.out.println(line); - } - } + private WireMockServer serviceKontoMockServer; + private WireMockServer postfachFacadeMockServer; @Override public void beforeAll(ExtensionContext context) { @@ -56,77 +32,44 @@ public class OsiMockServerExtension implements BeforeAllCallback, AfterAllCallba @Override public void afterEach(ExtensionContext context) { - postfachFacadeMockClient.reset(); - serviceKontoMockClient.reset(); + postfachFacadeMockServer.resetAll(); + serviceKontoMockServer.resetAll(); } @Override public void afterAll(ExtensionContext context) { - serviceKontoMockClient.stop(); - serviceKontoMockContainer.stop(); - - postfachFacadeMockClient.stop(); - postfachFacadeMockContainer.stop(); + serviceKontoMockServer.shutdown(); + postfachFacadeMockServer.shutdown(); } private void setupPostfachFacadeMock() { - postfachFacadeMockContainer.start(); - postfachFacadeMockClient = new MockServerClient( - postfachFacadeMockContainer.getHost(), - postfachFacadeMockContainer.getServerPort() - ); + postfachFacadeMockServer = new WireMockServer(0); + postfachFacadeMockServer.start(); } private void setupServiceKontoMock() { - serviceKontoMockContainer.start(); - serviceKontoMockClient = new MockServerClient( - serviceKontoMockContainer.getHost(), - serviceKontoMockContainer.getServerPort() - ); + serviceKontoMockServer = new WireMockServer(0); + serviceKontoMockServer.start(); } public String getAccessTokenUrl() { - return getMockServerUrl(serviceKontoMockClient) + "/access-token"; + return serviceKontoMockServer.baseUrl() + "/access-token"; } public String getPostfachFacadeUrl() { - return getMockServerUrl(postfachFacadeMockClient); - } - - private String getMockServerUrl(MockServerClient mockClient) { - return "http://" + mockClient.remoteAddress().getHostName() + ":" + mockClient.remoteAddress().getPort(); + return postfachFacadeMockServer.baseUrl(); } @Override public void beforeEach(ExtensionContext context) { - serviceKontoMockClient - .when( - request() - .withMethod("POST") - .withPath("/access-token") - .withHeaders( - header("Content-Type", "application/x-www-form-urlencoded") - ) - .withBody( - params( - param("grant_type", "client_credentials"), - param("client_id", CLIENT_ID), - param("client_secret", "changeme"), - param("scope", String.join(" ", CLIENT_SCOPES)), - param("resource", RESOURCE_URN) - ) - ), - exactly(1) - ) - .respond( - response() - .withStatusCode(200) - .withHeader("Content-Type", "application/json") - .withBody( - JwtFactory.createTokenResponse( - JwtFactory.createAccessTokenExampleWithExpireIn(900) - ) - ) - ); + 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/JsonUtil.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/JsonUtil.java index fb9565d6714674ce91bdd0d275c67e46b91a0c76..ac01337f93e1fb6223b049dd616f1a94dd1ab9c9 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/JsonUtil.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/JsonUtil.java @@ -1,12 +1,13 @@ package de.ozgcloud.nachrichten.postfach.osiv2.factory; import com.fasterxml.jackson.databind.ObjectMapper; - import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + import lombok.SneakyThrows; public class JsonUtil { - private static final ObjectMapper jsonMapper = new ObjectMapper().registerModule(new JavaTimeModule()); + private static final ObjectMapper jsonMapper = new ObjectMapper() + .registerModule(new JavaTimeModule()); @SneakyThrows public static String toJson(Object object) { 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 0000000000000000000000000000000000000000..75a60a29f366e9ea29f68686f234a02c0d8fd987 --- /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 0000000000000000000000000000000000000000..8721bbb3508709753faf323df9a8cf37edb5974a --- /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 0000000000000000000000000000000000000000..0c296a6f816a801dcf5a7f2b4ba6e6e3b8e1d653 --- /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/PostfachAddressTestFactory.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/PostfachAddressTestFactory.java index a871295c212323e8f9f1bdab218fd1f28d1a3817..046f298c7060ef696550ed252f7b51c097e297fe 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/PostfachAddressTestFactory.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/PostfachAddressTestFactory.java @@ -5,6 +5,7 @@ import de.ozgcloud.nachrichten.postfach.PostfachAddress; public class PostfachAddressTestFactory { public static final String MAILBOX_ID = "testMailboxId"; + public static final String SERVICE_KONTO_TYPE = "TYPE1"; public static PostfachAddress create() { return createBuilder().build(); @@ -13,6 +14,7 @@ public class PostfachAddressTestFactory { public static PostfachAddress.PostfachAddressBuilder createBuilder() { return PostfachAddress.builder() .type(1) + .serviceKontoType("TYPE1") .identifier(DummyStringBasedIdentifier.builder() .mailboxId(MAILBOX_ID) .build()); 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 61a52ac52df930ef3568e5c60d8e1b5a2f0f81d2..244a643d6f68160ea2243e9e868bf589f20291f3 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/RequestMapperTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2RequestMapperTest.java similarity index 97% rename from src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapperTest.java rename to src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2RequestMapperTest.java index 0e67c3c307449847d9e9e89e936f6812938ae98a..3abec1a5f53dd2c897230896e38a443eebd4ce4d 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapperTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2RequestMapperTest.java @@ -23,9 +23,9 @@ import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.OutSendMessageRequestV2; import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1EidasLevel; import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyBehavior; -class RequestMapperTest { +class Osi2RequestMapperTest { - private final RequestMapper mapper = Mappers.getMapper(RequestMapper.class); + private final Osi2RequestMapper mapper = Mappers.getMapper(Osi2RequestMapper.class); @DisplayName("map mailbox id") @Nested diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapperTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2ResponseMapperTest.java similarity index 93% rename from src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapperTest.java rename to src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2ResponseMapperTest.java index d4c8706356d03230611e185f639484e124b2601d..54586de660f6dacc6967dff94bdf70e6f3871d79 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapperTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2ResponseMapperTest.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 { +class Osi2ResponseMapperTest { @InjectMocks - private ResponseMapper mapper = Mappers.getMapper(ResponseMapper.class); - private V1ReplyMessage message = V1ReplyMessageFactory.create(); + private Osi2ResponseMapper mapper = Mappers.getMapper(Osi2ResponseMapper.class); + private V1ReplyMessage message = V1ReplyMessageTestFactory.create(); @DisplayName("map V1ReplyMessage to PostfachNachricht") @Nested diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeServiceTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeServiceTest.java index 139ba192c9394ddb55d2657e094a2d9d15765866..c1abebba22f3e88935c0465e0bba99d6840a07e5 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeServiceTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeServiceTest.java @@ -32,10 +32,10 @@ class PostfachApiFacadeServiceTest { MessageExchangeApi messageExchangeApi; @Mock - RequestMapper requestMapper; + Osi2RequestMapper osi2RequestMapper; @Mock - ResponseMapper responseMapper; + Osi2ResponseMapper osi2ResponseMapper; @DisplayName("send message") @Nested @@ -51,8 +51,8 @@ class PostfachApiFacadeServiceTest { @BeforeEach void mock() { - when(requestMapper.mapMailboxId(nachricht)).thenReturn(MAILBOX_ID); - when(requestMapper.mapOutSendMessageRequestV2(nachricht)).thenReturn(outSendMessageRequestV2); + when(osi2RequestMapper.mapMailboxId(nachricht)).thenReturn(MAILBOX_ID); + when(osi2RequestMapper.mapOutSendMessageRequestV2(nachricht)).thenReturn(outSendMessageRequestV2); when(messageExchangeApi.sendMessage(any(), any())).thenReturn(messageExchangeSendMessageResponse); } @@ -107,17 +107,17 @@ class PostfachApiFacadeServiceTest { @Test void shouldCallResponseMapper(){ when(messageExchangeApi.getMessage(any())).thenReturn(replyMessage); - when(responseMapper.toPostfachNachricht(any())).thenReturn(PostfachNachrichtTestFactory.create()); + when(osi2ResponseMapper.toPostfachNachricht(any())).thenReturn(PostfachNachrichtTestFactory.create()); postfachApiFacadeService.fetchMessageByGuid(receiveMessage); - verify(responseMapper).toPostfachNachricht(any()); + verify(osi2ResponseMapper).toPostfachNachricht(any()); } @Test void shouldReturnPostfachNachricht(){ when(messageExchangeApi.getMessage(any())).thenReturn(replyMessage); - when(responseMapper.toPostfachNachricht(any())).thenReturn(PostfachNachrichtTestFactory.create()); + when(osi2ResponseMapper.toPostfachNachricht(any())).thenReturn(PostfachNachrichtTestFactory.create()); var postfachNachricht = postfachApiFacadeService.fetchMessageByGuid(receiveMessage); diff --git a/src/test/resources/application-itcase.yml b/src/test/resources/application-itcase.yml index dcbea65d1bba45b8c4882d109a07064f09581a61..41e84786e9e76db63c2d6671a55ae56dddae6ea7 100644 --- a/src/test/resources/application-itcase.yml +++ b/src/test/resources/application-itcase.yml @@ -1,3 +1,6 @@ +ozgcloud: + osiv2: + enabled: true logging: level: de.ozgcloud.nachrichten.postfach.osiv2: DEBUG