Skip to content
Snippets Groups Projects
Commit c4325a71 authored by Lukas Malte Monnerjahn's avatar Lukas Malte Monnerjahn
Browse files

KOP-2694 KOP-3010 use xta-client-lib 0.2.0

parent 38545fec
No related branches found
No related tags found
1 merge request!5Kop 2694 xta client lib verwenden
Pipeline #1801 passed
Showing
with 51 additions and 251 deletions
......@@ -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>
......
......@@ -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")
......
/*
* 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);
}
}
......@@ -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;
}
......@@ -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
......
......@@ -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:
......
......@@ -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 {
......
......@@ -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);
}
......
/*
* 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();
}
}
}
/*
* 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));
}
}
......@@ -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);
......
......@@ -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();
......
......@@ -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,13 +86,10 @@ 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());
doReturn(List.of(transportReport)).when(xtaClient).fetchMessages(any());
}
@Test
......@@ -101,34 +97,11 @@ class XtaServiceTest {
void shouldCallXtaClient() {
service.fetchMessages();
verify(xtaClient).fetchMessages(service::processMessage);
// Can't test for passing the correct method when service is wrapped in a spy
verify(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();
verify(xtaClient, calls(3)).fetchMessages(service::processMessage);
}
}
}
@DisplayName("process message")
@Nested
class TestProcessMessage {
......@@ -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() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment