diff --git a/pom.xml b/pom.xml index 74d7b28f7820817de6226e1d3a412f32bdb06892..2b1b32b74fd86c23ffb8c5a8634d620b8d9751d5 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ <eingang-manager.version>2.17.0</eingang-manager.version> <intelliform-semantik.version>2.17.0</intelliform-semantik.version> <dfoerdermittel-semantik.version>2.17.0</dfoerdermittel-semantik.version> - <xta-client-lib.version>0.1.0</xta-client-lib.version> + <xta-client-lib.version>0.2.0</xta-client-lib.version> <xmlschema.version>2.3.0</xmlschema.version> diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java b/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java index 7b12d480c746af9f51ac1cdc638164758562dc3b..0f15765cba3e0a94ca03f11b1ec3f48c5ba380f4 100644 --- a/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java +++ b/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java @@ -67,9 +67,8 @@ interface XtaMessageMapper { @Mapping(target = "messageTypeListVersion", ignore = true) @Mapping(target = "metaDataFile", ignore = true) @Mapping(target = "service", source = "service") - // todo add origin and delivery in xta-client-lib - @Mapping(target = "origin", ignore = true) - @Mapping(target = "delivery", ignore = true) + @Mapping(target = "origin", source = "deliveryAttributesOrigin") + @Mapping(target = "delivery", source = "deliveryAttributesDelivery") @Mapping(target = "messageId", source = "messageId") @Mapping(target = "messageType", source = "messageTypeCode") @Mapping(target = "xtaIdentifier", source = "readerIdentifier.value") diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapper.java b/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapper.java deleted file mode 100644 index 7727fa8526f696a13328a28ca08eb654c72948bb..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapper.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2024 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.eingang.xta; - -import java.util.stream.Stream; - -import jakarta.xml.bind.JAXBElement; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -import eu.osci.ws._2008._05.transport.MsgStatusListType; -import eu.osci.ws._2014._10.transport.MessageMetaData; - -@Mapper -interface XtaMessageMetaDataMapper { - - @Mapping(target = "messageTypeListVersion", ignore = true) - @Mapping(target = "metaDataFile", ignore = true) - @Mapping(target = "service", ignore = true) - @Mapping(target = "origin", source = "deliveryAttributes.origin") - @Mapping(target = "delivery", source = "deliveryAttributes.delivery") - @Mapping(target = "messageId", source = "msgIdentification.messageID.value") - @Mapping(target = "messageType", source = "qualifier.messageType.code") - @Mapping(target = "xtaIdentifier", source = "destinations.reader.identifier.value") - XtaFormMetaData fromSoap(MessageMetaData metaData); - - default XtaMessageId fromString(String id) { - return XtaMessageId.from(id); - } - - @Mapping(target = "moreMessagesAvailable", constant = "false") - XtaMessageMetaDatasAndHeader msgStatusListFromSoap(MsgStatusListTypeAndHeaderResponse statusList); - - default Stream<XtaFormMetaData> map(JAXBElement<MsgStatusListType> msgStatusListResponse) { - return msgStatusListResponse.getValue().getMessageMetaData().stream().map(this::fromSoap); - } -} diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaProperties.java b/src/main/java/de/ozgcloud/eingang/xta/XtaProperties.java index b16fb0d0a21f4ffc06ed19214cb7911210f88a87..cbceb43352f35eb59598d30c1139e6ab871c4078 100644 --- a/src/main/java/de/ozgcloud/eingang/xta/XtaProperties.java +++ b/src/main/java/de/ozgcloud/eingang/xta/XtaProperties.java @@ -24,7 +24,6 @@ package de.ozgcloud.eingang.xta; import java.math.BigInteger; -import java.net.URI; import java.util.List; import jakarta.validation.constraints.NotEmpty; @@ -53,7 +52,6 @@ class XtaProperties { private BigInteger maxListElements; private KeyStore keyStore; - private Actions actions; @NotEmpty private List<String> identifiers; } @@ -89,20 +87,3 @@ class KeyStore { @NotEmpty private char[] password; } - -@Validated -@ToString -@Setter -@Getter -@Configuration -@ConfigurationProperties(prefix = Actions.PROPERTIES_PREFIX) -class Actions { - static final String PROPERTIES_PREFIX = XtaProperties.PROPERTIES_PREFIX + ".actions"; - - @NotNull - private URI statusList; - @NotNull - private URI fetchRequest; - @NotNull - private URI closeRequest; -} diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaServiceConfiguration.java b/src/main/java/de/ozgcloud/eingang/xta/XtaServiceConfiguration.java index 0719b32f4defbfe4ae0c27021628aa1a2f218d0f..20b0e3ef9526bf85dd41199757ed33d6b6dc9a74 100644 --- a/src/main/java/de/ozgcloud/eingang/xta/XtaServiceConfiguration.java +++ b/src/main/java/de/ozgcloud/eingang/xta/XtaServiceConfiguration.java @@ -25,6 +25,7 @@ package de.ozgcloud.eingang.xta; import java.util.List; +import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; @@ -39,6 +40,7 @@ import de.ozgcloud.xta.client.model.XtaIdentifier; @Log4j2 @Configuration +@RequiredArgsConstructor public class XtaServiceConfiguration { static final String URI_TEMPLATE = "https://%s/MB_XTA-WS/XTA210"; @@ -47,8 +49,7 @@ public class XtaServiceConfiguration { static final String FIM_MESSAGE_TYPE_PREFIX = "fim."; - @Autowired - private XtaProperties properties; + private final XtaProperties properties; @Bean @SneakyThrows diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 32946db66ec8de3df169846d9c8a5559a329c628..e8fbff212ba836f29b4e20d5152c771963c1d133 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -9,10 +9,6 @@ ozgcloud: max-list-elements: 100 keystore: type: PKCS12 - actions: - status-list: "http://www.osci.eu/ws/2008/05/transport/urn/messageTypes/MsgBoxStatusListRequest" - fetch-request: "http://www.osci.eu/ws/2008/05/transport/urn/messageTypes/MsgBoxFetchRequest" - close-request: "http://www.osci.eu/ws/2008/05/transport/urn/messageTypes/MsgBoxCloseRequest" eingang: fim: schemeLocations: diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java b/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java index 672b68c75048f156999ebca098497afa9f9921f0..7dd985e31ca5ab08925e97e5eebc727541d75fda 100644 --- a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java +++ b/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java @@ -125,6 +125,30 @@ class XtaMessageMapperTest { } } + @Nested + class TestFormMetaDataFromMetaData { + private XtaMessageMetaData metaData; + + @BeforeEach + void before() { + metaData = XtaMessageMetaDataTestFactory.create(); + } + + @Test + void shouldSetOrigin() { + var formMetaData = mapper.formMetaDataFromMetaData(metaData); + + assertThat(formMetaData.getOrigin()).isEqualTo(metaData.deliveryAttributesOrigin()); + } + + @Test + void shouldSetDelivery() { + var formMetaData = mapper.formMetaDataFromMetaData(metaData); + + assertThat(formMetaData.getDelivery()).isEqualTo(metaData.deliveryAttributesDelivery()); + } + } + @Nested class TestToFimFormData { diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataFactory.java b/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataFactory.java index 3238362540d6697cad3bbbe8516c99a5beed572f..cbfbabf83e48402306bcfaf844a2a89667dce38b 100644 --- a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataFactory.java +++ b/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataFactory.java @@ -27,7 +27,6 @@ import static de.ozgcloud.eingang.xta.XtaMessageTestFactory.*; import java.time.ZonedDateTime; -import de.ozgcloud.eingang.common.formdata.FormMetaDataTestFactory; import de.ozgcloud.xta.client.model.XtaIdentifier; import de.ozgcloud.xta.client.model.XtaMessageMetaData; @@ -37,7 +36,6 @@ class XtaMessageMetaDataTestFactory { static final String FIM_MESSAGE_TYPE = "fim.S17000652.17000652001004"; static final ZonedDateTime ORIGIN = ZonedDateTime.parse("2022-10-29T15:45:52.4942149+02:00"); static final String SERVICE = "urn:fim:Versammlungsanzeige:1.4"; - static final String MESSAGE_TYPE_LIST_VERSION = "1.0"; static final XtaIdentifier READER_IDENTIFIER = XtaIdentifier.builder() .value("vbe:010550120100").build(); @@ -49,7 +47,7 @@ class XtaMessageMetaDataTestFactory { return XtaMessageMetaData.builder() .messageId(MESSAGE_ID.toString()) .messageTypeCode(MESSAGE_TYPE) - // .origin(ORIGIN) TODO add in xta-client-lib + .deliveryAttributesOrigin(ORIGIN) .readerIdentifier(READER_IDENTIFIER) .service(SERVICE); } diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapperTest.java b/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapperTest.java deleted file mode 100644 index 3857a563f43b64c64e158ec68d2dd0ed0cb33812..0000000000000000000000000000000000000000 --- a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapperTest.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2024 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.eingang.xta; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.Spy; - -class XtaMessageMetaDataMapperTest { - - @Spy - private final XtaMessageMetaDataMapper mapper = Mappers.getMapper(XtaMessageMetaDataMapper.class); - - @DisplayName("msg status list from soap") - @Nested - class TestMsgStatusListFromSoap { - - @Test - void shouldMap() { - var response = MsgStatusListTypeAndHeaderResponseTestFactory.create(); - - var result = mapper.msgStatusListFromSoap(response); - - assertThat(result).isNotNull(); - } - - @DisplayName("should set moreMessagesAvailable to false") - @Test - void shouldSetMoreMessagesAvailableToFalse() { - var response = MsgStatusListTypeAndHeaderResponseTestFactory.create(); - - var result = mapper.msgStatusListFromSoap(response); - - assertThat(result.isMoreMessagesAvailable()).isFalse(); - } - } -} diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDatasAndHeaderTestFactory.java b/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDatasAndHeaderTestFactory.java deleted file mode 100644 index 2e97f03bd035ad396bb7c1b13e8f5c7fc6ad5c10..0000000000000000000000000000000000000000 --- a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDatasAndHeaderTestFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2024 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.eingang.xta; - -import java.util.UUID; -import java.util.stream.Stream; - -class XtaMessageMetaDatasAndHeaderTestFactory { - - public static final String MSG_BOX_REQUEST_ID = UUID.randomUUID().toString(); - - public static final XtaFormMetaData MESSAGE1 = XtaFormMetaDataTestFactory.create(); - - public static XtaMessageMetaDatasAndHeader create() { - return createBuilder().build(); - } - - public static XtaMessageMetaDatasAndHeader.XtaMessageMetaDatasAndHeaderBuilder createBuilder() { - return XtaMessageMetaDatasAndHeader.builder() - .msgBoxRequestID(MSG_BOX_REQUEST_ID) - .messages(Stream.of(MESSAGE1)); - } -} diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaPropertiesTestFactory.java b/src/test/java/de/ozgcloud/eingang/xta/XtaPropertiesTestFactory.java index 4d4a3b7b889d130769be3ffc22728cdccfc1a114..2aa7a01e8959db326779e75c354a580fe1f2c3e8 100644 --- a/src/test/java/de/ozgcloud/eingang/xta/XtaPropertiesTestFactory.java +++ b/src/test/java/de/ozgcloud/eingang/xta/XtaPropertiesTestFactory.java @@ -23,24 +23,17 @@ */ package de.ozgcloud.eingang.xta; -import java.net.URI; - import lombok.SneakyThrows; class XtaPropertiesTestFactory { private static final String SERVER_PROTOCOL = "https"; - private static final String SERVER_ADDRESS = "xta-adapter-port-forward-service.ssh-port-forward.svc.cluster.local"; + static final String SERVER_ADDRESS = "xta-adapter-port-forward-service.ssh-port-forward.svc.cluster.local"; @SneakyThrows static XtaProperties create() { XtaProperties properties = new XtaProperties(); - Actions actions = new Actions(); - properties.setActions(actions); - actions.setFetchRequest(new URI("http://tempuri.local/fetch")); - actions.setStatusList(new URI("http://tempuri.lcoal/statusList")); - Server server = new Server(); properties.setServer(server); server.setProtocol(SERVER_PROTOCOL); diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaServiceConfigurationTest.java b/src/test/java/de/ozgcloud/eingang/xta/XtaServiceConfigurationTest.java index 012411dd3537a346029c552762521fc625b32e66..cf26796081ddf561e5008856c29996204e668195 100644 --- a/src/test/java/de/ozgcloud/eingang/xta/XtaServiceConfigurationTest.java +++ b/src/test/java/de/ozgcloud/eingang/xta/XtaServiceConfigurationTest.java @@ -28,21 +28,18 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; import org.mockito.Spy; class XtaServiceConfigurationTest { - @Spy - @InjectMocks - XtaServiceConfiguration configuration; - - @Mock XtaProperties properties = XtaPropertiesTestFactory.create(); + @Spy + XtaServiceConfiguration configuration = new XtaServiceConfiguration(properties); + @Test void testBuildServerAddressUri() { + assertThat(properties.getServer().getAddress()).isEqualTo(XtaPropertiesTestFactory.SERVER_ADDRESS); String serverBaseUrl = configuration.getBaseUrl(); diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java b/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java index 77119be77589e48e523bbb22a47800abf6280817..8e138936e91cb5541353115a33ae32256c71b463 100644 --- a/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java +++ b/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java @@ -31,7 +31,6 @@ import static org.mockito.Mockito.*; import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.stream.Stream; import lombok.SneakyThrows; import org.junit.jupiter.api.BeforeEach; @@ -87,46 +86,20 @@ class XtaServiceTest { private final XtaTransportReport transportReport = XtaTransportReportFactory.create(); - @DisplayName("with one message") - @Nested - class TestWithOneMessage { - @BeforeEach - @SneakyThrows - void setup() { - doReturn(Stream.of(transportReport)).when(xtaClient).fetchMessages(any()); - } - - @Test - @SneakyThrows - void shouldCallXtaClient() { - service.fetchMessages(); - - verify(xtaClient).fetchMessages(service::processMessage); - } + @BeforeEach + @SneakyThrows + void setup() { + doReturn(List.of(transportReport)).when(xtaClient).fetchMessages(any()); } - @DisplayName("with multiple messages") - @Nested - class TestWithMultipleMessages { - private final XtaTransportReport transportReport2 = XtaTransportReportFactory.create(); - private final XtaTransportReport transportReport3 = XtaTransportReportFactory.create(); - - @BeforeEach - @SneakyThrows - void setup() { - doReturn(Stream.of(transportReport, transportReport2, transportReport3)).when(xtaClient).fetchMessages(any()); - } - - @DisplayName("should return stream of messages") - @Test - @SneakyThrows - void shouldReturnStreamOfMessages() { - service.fetchMessages(); + @Test + @SneakyThrows + void shouldCallXtaClient() { + service.fetchMessages(); - verify(xtaClient, calls(3)).fetchMessages(service::processMessage); - } + // Can't test for passing the correct method when service is wrapped in a spy + verify(xtaClient).fetchMessages(any()); } - } @DisplayName("process message") @@ -165,13 +138,16 @@ class XtaServiceTest { @Nested class TestGetFormDataIfNoRuntimeException { - // BeforeEach from factory instead of Mock - @Mock XtaMessage message; @Mock FormData formData; + @BeforeEach + void before() { + message = XtaMessageTestFactory.create(); + } + @DisplayName("should call get formdata") @Test void shouldCallGetFormdata() {