From 44c7e5fc7990f7680a9ebf2c9066df8d4c76ece9 Mon Sep 17 00:00:00 2001
From: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de>
Date: Mon, 9 Sep 2024 16:55:52 +0200
Subject: [PATCH] OZG-6240 KOP-2589 WIP ResponseMapping und ManagementPort Test

---
 .../xta/test/app/mapper/ResponseMapper.java   | 24 ++++--
 .../test/app/server/ManagementPortImpl.java   |  2 +
 .../app/server/ManagementPortImplTest.java    | 73 +++++++++++++++++++
 3 files changed, 92 insertions(+), 7 deletions(-)

diff --git a/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java b/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java
index 44b84a5..cdb40e5 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java
@@ -9,6 +9,7 @@ import java.util.List;
 import javax.xml.datatype.DatatypeFactory;
 import javax.xml.datatype.XMLGregorianCalendar;
 
+import genv3.de.xoev.transport.xta.x211.TransportReport;
 import jakarta.activation.DataHandler;
 import jakarta.activation.FileDataSource;
 
@@ -21,12 +22,8 @@ import org.mapstruct.ReportingPolicy;
 import org.mapstruct.SourcePropertyName;
 import org.mapstruct.TargetPropertyName;
 
-import de.ozgcloud.xta.test.app.model.XtaFile;
-import de.ozgcloud.xta.test.app.model.XtaIdentifier;
-import de.ozgcloud.xta.test.app.model.XtaLookupServiceRequest;
-import de.ozgcloud.xta.test.app.model.XtaMessage;
-import de.ozgcloud.xta.test.app.model.XtaMessageMetaData;
-import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing;
+import de.ozgcloud.xta.test.app.model.*;
+
 import genv3.de.xoev.transport.xta.x211.ContentType;
 import genv3.de.xoev.transport.xta.x211.GenericContentContainer;
 import genv3.de.xoev.transport.xta.x211.LookupServiceResponse;
@@ -128,7 +125,12 @@ public interface ResponseMapper {
 
 	@SneakyThrows
 	default XMLGregorianCalendar createNowXmlGregorianCalendarFromLocalDateTime() {
-		var isoTimeString = DateTimeFormatter.ISO_DATE_TIME.format(LocalDateTime.now());
+		return createXmlGregorianCalendarFromLocalDateTime(LocalDateTime.now());
+	}
+
+	@SneakyThrows
+	default XMLGregorianCalendar createXmlGregorianCalendarFromLocalDateTime(LocalDateTime localDateTime) {
+		var isoTimeString = DateTimeFormatter.ISO_DATE_TIME.format(localDateTime);
 		return DatatypeFactory.newInstance().newXMLGregorianCalendar(isoTimeString);
 	}
 
@@ -177,6 +179,14 @@ public interface ResponseMapper {
 	@Mapping(target = "lookupServiceResultList.lookupServiceResult", expression = "java( List.of( mapLookupServiceResultType(xtaLookupServiceRequest) ) )")
 	LookupServiceResponse mapLookupServiceResponse(XtaLookupServiceRequest xtaLookupServiceRequest);
 
+	@Mapping(target = "messageMetaData", source = "messageMetaData")
+	@Mapping(target = "reportTime", source = "reportTime")
+	@Mapping(target = "xtaServerIdentity", constant = "xta-test-server")
+	@Mapping(target = "messageStatus.status", source = "status.ordinal")
+	@Mapping(target = "additionalReports", ignore = true)
+	@Mapping(target = "signature", ignore = true)
+	TransportReport mapTransportReport(XtaTransportReport xtaTransportReport);
+
 	@Mapping(target = "otherAttributes", ignore = true)
 	AttributedURIType mapCreateMessageIdResponse(String value);
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/server/ManagementPortImpl.java b/src/main/java/de/ozgcloud/xta/test/app/server/ManagementPortImpl.java
index d47d134..e358158 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/server/ManagementPortImpl.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/server/ManagementPortImpl.java
@@ -7,6 +7,7 @@ import org.apache.cxf.annotations.SchemaValidation;
 import org.apache.cxf.ws.addressing.AttributedURIType;
 import org.springframework.stereotype.Component;
 
+import de.ozgcloud.xta.test.app.mapper.ExceptionMapper;
 import de.ozgcloud.xta.test.app.mapper.RequestMapper;
 import de.ozgcloud.xta.test.app.mapper.ResponseMapper;
 import de.ozgcloud.xta.test.app.service.XtaMessageService;
@@ -29,6 +30,7 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class ManagementPortImpl implements ManagementPortType {
 
+	private final ExceptionMapper exceptionMapper;
 	private final ResponseMapper responseMapper;
 	private final RequestMapper requestMapper;
 	private final RequestValidator requestValidator;
diff --git a/src/test/java/de/ozgcloud/xta/test/app/server/ManagementPortImplTest.java b/src/test/java/de/ozgcloud/xta/test/app/server/ManagementPortImplTest.java
index 6574133..65287db 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/server/ManagementPortImplTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/server/ManagementPortImplTest.java
@@ -4,6 +4,10 @@ import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
+import java.util.Optional;
+
+import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException;
+import genv3.de.xoev.transport.xta.x211.TransportReport;
 import org.apache.cxf.ws.addressing.AttributedURIType;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
@@ -12,9 +16,13 @@ import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
+import de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory;
+import de.ozgcloud.xta.test.app.mapper.ExceptionMapper;
 import de.ozgcloud.xta.test.app.mapper.RequestMapper;
 import de.ozgcloud.xta.test.app.mapper.ResponseMapper;
+import de.ozgcloud.xta.test.app.model.XtaGetTransportReportRequest;
 import de.ozgcloud.xta.test.app.model.XtaLookupServiceRequest;
+import de.ozgcloud.xta.test.app.model.XtaTransportReport;
 import de.ozgcloud.xta.test.app.service.XtaMessageService;
 import de.ozgcloud.xta.test.app.validation.RequestValidator;
 import genv3.de.xoev.transport.xta.x211.LookupServiceRequest;
@@ -30,6 +38,8 @@ public class ManagementPortImplTest {
 	@Mock
 	private XtaMessageService xtaMessageService;
 	@Mock
+	private ExceptionMapper exceptionMapper;
+	@Mock
 	private ResponseMapper responseMapper;
 	@Mock
 	private RequestMapper requestMapper;
@@ -113,4 +123,67 @@ public class ManagementPortImplTest {
 			assertThat(result).isEqualTo(response);
 		}
 	}
+
+	@DisplayName("get transport report")
+	@Nested
+	class TestGetTransportReport {
+		private static final String MESSAGE_ID = "urn:de:xta:messageid:1";
+
+		@Mock
+		private AttributedURIType messageId;
+		@Mock
+		private PartyType authorIdentifier;
+		@Mock
+		private XtaTransportReport xtaTransportReport;
+
+		private XtaGetTransportReportRequest request;
+
+		@BeforeEach
+		void beforeEach() {
+			request = XtaGetTransportReportRequest.builder()
+					.messageId(MESSAGE_ID)
+					.clientIdentifier(XtaMessageMetaDataTestFactory.READER_IDENTIFIER)
+					.build();
+
+			when(requestMapper.mapXtaGetTransportReportRequest(messageId, authorIdentifier)).thenReturn(request);
+		}
+
+		@DisplayName("with valid request")
+		@Nested
+		class TestWithValidRequest {
+			@BeforeEach
+			void beforeEach() {
+				when(xtaMessageService.getTransportReport(request)).thenReturn(Optional.of(xtaTransportReport));
+				when(responseMapper.mapTransportReport(xtaTransportReport)).thenReturn(TRANSPORT_REPORT);
+			}
+
+			@DisplayName("should return")
+			@Test
+			void shouldReturn() {
+				var result = getTransportReport();
+
+				assertThat(result).contains(TRANSPORT_REPORT);
+			}
+		}
+
+		@DisplayName("with Invalid message id")
+		@Nested
+		class TestWithInvalidMessageId {
+			@Mock
+			private InvalidMessageIDException exception;
+
+			@DisplayName("should throw exception")
+			@Test
+			void shouldThrowException() {
+				when(xtaMessageService.getTransportReport(request)).thenReturn(Optional.empty());
+				when(exceptionMapper.createInvalidMessageIDException(any())).thenReturn(exception);
+
+			}
+		}
+
+		@SneakyThrows
+		private TransportReport getTransportReport() {
+			return managementPortImpl.getTransportReport(messageId, authorIdentifier);
+		}
+	}
 }
\ No newline at end of file
-- 
GitLab