Skip to content
Snippets Groups Projects
Commit d5cc75b9 authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'OZG-6317-AnhaengeVersammlungsanzeige' (#156) from...

Merge pull request 'OZG-6317-AnhaengeVersammlungsanzeige' (#156) from OZG-6317-AnhaengeVersammlungsanzeige into master

Reviewed-on: https://git.ozg-sh.de/ozgcloud-app/eingang-manager/pulls/156


Reviewed-by: default avatarOZGCloud <ozgcloud@mgm-tp.com>
parents bdbb770e 8f953562
No related branches found
No related tags found
No related merge requests found
Showing
with 124 additions and 34 deletions
......@@ -57,9 +57,6 @@ class XtaIncomingFilesMapper {
}
IncomingFile toIncomingFile(XtaFile messageFile) {
if (!messageFile.contentType().equals(ZIP_CONTENT_TYPE)) {
LOG.warn("Expected XTA messageFile to be of content type " + ZIP_CONTENT_TYPE + ". Instead was " + messageFile.contentType());
}
return IncomingFile.builder()
.name(messageFile.name())
.contentType(messageFile.contentType())
......
......@@ -12,4 +12,6 @@ public class XtaMessage {
private XtaMessageMetaData metaData;
@Singular
private Collection<XtaFile> messageFiles;
@Singular
private Collection<XtaFile> attachments;
}
......@@ -182,18 +182,28 @@ class XtaRemoteService {
}
public XtaMessage getMessage(XtaMessageId messageId) {
var contentContainer = loadContentContainer(messageId.toString());
return XtaMessage.builder()
.metaData(null)
.messageFiles(Collections.singleton(getMessage(messageId.toString())))
.messageFiles(Collections.singleton(getMessage(contentContainer)))
.attachments(getAttachments(contentContainer).toList())
.build();
}
XtaFile getMessage(String messageId) {
GenericContentContainer loadContentContainer(String messageId) {
var callback = new ActionCallback(properties.getActions().getFetchRequest(), new Addressing10(), getTargetUri());
var template = webServiceTemplateBuilder.setMarshaller(osciMarshaller).setUnmarshaller(xoevMarshaller).build();
var result = (GenericContentContainer) template.marshalSendAndReceive(buildFetchRequest(messageId), callback);
return toXtaFile(result.getContentContainer().getMessage());
return (GenericContentContainer) template.marshalSendAndReceive(buildFetchRequest(messageId), callback);
}
XtaFile getMessage(GenericContentContainer container) {
return toXtaFile(container.getContentContainer().getMessage());
}
Stream<XtaFile> getAttachments(GenericContentContainer container) {
return container.getContentContainer().getAttachment().stream().map(this::toXtaFile);
}
private XtaFile toXtaFile(ContentType type) {
......
......@@ -11,7 +11,7 @@ import de.ozgcloud.eingang.semantik.SemantikAdapter;
import lombok.NonNull;
import lombok.extern.log4j.Log4j2;
@Profile({"!itcase", "fim"})
@Profile({ "!itcase" })
@Log4j2
@Component
class XtaRunner implements ApplicationListener<ContextRefreshedEvent> {
......
package de.ozgcloud.eingang.xta;
import static java.util.Collections.emptyList;
import static java.util.Collections.*;
import java.util.Collection;
import java.util.List;
import java.util.Spliterators;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -14,6 +16,7 @@ import org.springframework.stereotype.Service;
import de.ozgcloud.eingang.common.errorhandling.TechnicalException;
import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier;
import de.ozgcloud.eingang.xdomea.XdomeaMessageDataMapper;
import lombok.NonNull;
......@@ -56,14 +59,9 @@ class XtaService {
}
boolean isSupportedMessageType(XtaMessageMetaData metaData) {
if (StringUtils.equals(metaData.getMessageType(), XDOMEA_0201_MESSAGE_TYPE)) {
if (isXDomeaMessageType(metaData.getMessageType()) || isFimMessageType(metaData.getMessageType())) {
return true;
}
if (StringUtils.startsWith(metaData.getMessageType(), FIM_MESSAGE_TYPE_PREFIX)) {
return true;
}
LOG.warn("Ignoring XTA-Message of type '{}'.", metaData.getMessageType());
return false;
}
......@@ -72,20 +70,44 @@ class XtaService {
var msg = remoteService.getMessage(metaData.getMessageId());
var incomingFiles = xtaIncomingFilesMapper.toIncomingFiles(msg.getMessageFiles());
return mapper.toFormData(getRepresentationsAttachmentsPair(metaData, incomingFiles), metaData, vorgangNummerSupplier);
var formData = mapper.toFormData(getRepresentationsAttachmentsPair(metaData, incomingFiles), metaData, vorgangNummerSupplier);
return addAttachments(msg, formData);
}
FormData addAttachments(XtaMessage msg, FormData inFormData) {
var attachments = buildAttachmentsInFiles(msg.getAttachments());
if (CollectionUtils.isNotEmpty(attachments)) {
return inFormData.toBuilder()
.attachment(IncomingFileGroup.builder().name("sonstige").files(attachments).build())
.numberOfAttachments(attachments.size())
.build();
}
return inFormData;
}
private List<IncomingFile> buildAttachmentsInFiles(Collection<XtaFile> attachmentFiles) {
return attachmentFiles.stream().map(xtaIncomingFilesMapper::toIncomingFile).toList();
}
RepresentationsAttachmentsPair getRepresentationsAttachmentsPair(XtaMessageMetaData metaData, List<IncomingFile> incomingFiles) {
if (StringUtils.equals(metaData.getMessageType(), XDOMEA_0201_MESSAGE_TYPE)) {
if (isXDomeaMessageType(metaData.getMessageType())) {
return xdomeaMessageDataMapper.mapIncomingFilesToRepresentationsAttachmentsPair(incomingFiles);
}
if (StringUtils.startsWith(metaData.getMessageType(), FIM_MESSAGE_TYPE_PREFIX)) {
if (isFimMessageType(metaData.getMessageType())) {
return mapIncomingFilesToRepresentations(incomingFiles);
}
throw new TechnicalException("Unexpected XTA message type: %s".formatted(metaData.getMessageType()));
}
private boolean isXDomeaMessageType(String messageType) {
return StringUtils.equals(messageType, XDOMEA_0201_MESSAGE_TYPE);
}
private boolean isFimMessageType(String messageType) {
return StringUtils.startsWith(messageType, FIM_MESSAGE_TYPE_PREFIX);
}
RepresentationsAttachmentsPair mapIncomingFilesToRepresentations(List<IncomingFile> incomingFiles) {
return RepresentationsAttachmentsPair.builder()
.representations(incomingFiles)
......
......@@ -4,6 +4,8 @@ class XtaMessageTestFactory {
static final XtaMessageId MESSAGE_ID = XtaMessageId.from("urn:de:xta:messageid:dataport_xta_210:81e40808-91c6-4765-aaf4-1aa62fec8be9");
static final XtaFile attachment = XtaFileTestFactory.create();
static XtaMessage create() {
return createBuilder().build();
}
......@@ -11,7 +13,7 @@ class XtaMessageTestFactory {
static XtaMessage.XtaMessageBuilder createBuilder() {
return XtaMessage.builder()
.metaData(XtaMessageMetaDataTestFactory.create())
.messageFile(XtaFileTestFactory.create());
.messageFile(XtaFileTestFactory.create())
.attachment(attachment);
}
}
......@@ -2,6 +2,8 @@ package de.ozgcloud.eingang.xta;
import static org.assertj.core.api.Assertions.*;
import jakarta.validation.Valid;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
......@@ -10,7 +12,6 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import de.ozgcloud.eingang.Application;
import jakarta.validation.Valid;
@Disabled("real live test - do only activate for manual testing")
@ActiveProfiles({ "itcase", "local" })
......@@ -54,7 +55,7 @@ class XtaRemoteServiceITCase {
class TestGetMessage {
@Test
void shouldSendRequest() {
var result = remoteService.getMessage("urn:de:xta:messageid:dataport_xta_210:20eb297a-e224-45a0-9376-5ebd4d9bcc9a");
var result = remoteService.loadContentContainer("urn:de:xta:messageid:dataport_xta_210:20eb297a-e224-45a0-9376-5ebd4d9bcc9a");
assertThat(result).isNotNull();
}
......
......@@ -4,14 +4,19 @@ import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import java.util.stream.Stream;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.Spy;
import org.springframework.boot.webservices.client.WebServiceTemplateBuilder;
import de.xoev.transport.xta._211.GenericContentContainer;
class XtaRemoteServiceTest {
@Spy
......@@ -93,17 +98,35 @@ class XtaRemoteServiceTest {
class TestGetMessage {
private XtaFile file = XtaFileTestFactory.create();
@Mock
private GenericContentContainer contentContainerMock;
@BeforeEach
void init() {
doReturn(file).when(service).getMessage(anyString());
doReturn(file).when(service).getMessage(Mockito.<GenericContentContainer>any());
doReturn(contentContainerMock).when(service).loadContentContainer(anyString());
doReturn(Stream.of(file)).when(service).getAttachments(any());
}
@Test
void shouldCallLoadContentContainer() {
service.getMessage(XtaMessageTestFactory.MESSAGE_ID);
verify(service).loadContentContainer(XtaMessageTestFactory.MESSAGE_ID.toString());
}
@Test
void shouldCallGetMessage() {
service.getMessage(XtaMessageTestFactory.MESSAGE_ID);
verify(service).getMessage(XtaMessageTestFactory.MESSAGE_ID.toString());
verify(service).getMessage(contentContainerMock);
}
@Test
void sohludCallGetAttachments() {
service.getMessage(XtaMessageTestFactory.MESSAGE_ID);
verify(service).getAttachments(contentContainerMock);
}
@Test
......
......@@ -135,9 +135,10 @@ class XtaServiceTest {
@Mock
private FormData formData;
private XtaMessage message;
private XtaMessageMetaData messageMetaData;
private XtaMessage message = XtaMessageTestFactory.create();
private XtaMessageMetaData messageMetaData = XtaMessageMetaDataTestFactory.create();
private RepresentationsAttachmentsPair classification;
private FormData mappedFormData = FormDataTestFactory.create();
@Captor
private ArgumentCaptor<XtaMessageMetaData> messageMetaDataCaptor;
......@@ -147,15 +148,16 @@ class XtaServiceTest {
@BeforeEach
void init() {
message = XtaMessageTestFactory.create();
when(remoteService.getMessage(any(XtaMessageId.class))).thenReturn(message);
var incomingFiles = List.of(IncomingFileTestFactory.create(), IncomingFileTestFactory.create());
messageMetaData = XtaMessageMetaDataTestFactory.create();
classification = RepresentationsAttachmentsPairTestFactory.create();
doReturn(classification).when(service).getRepresentationsAttachmentsPair(messageMetaData, incomingFiles);
var incomingFiles = List.of(IncomingFileTestFactory.create(), IncomingFileTestFactory.create());
when(incomingFilesMapper.toIncomingFiles(message.getMessageFiles())).thenReturn(incomingFiles);
when(mapper.toFormData(classification, messageMetaData, vorgangNummerSupplier)).thenReturn(formData);
doReturn(classification).when(service).getRepresentationsAttachmentsPair(messageMetaData, incomingFiles);
}
@BeforeEach
void mockMessageMapping() {
when(remoteService.getMessage(any(XtaMessageId.class))).thenReturn(message);
when(mapper.toFormData(any(), any(), any())).thenReturn(mappedFormData);
}
@Test
......@@ -181,11 +183,42 @@ class XtaServiceTest {
assertThat(classificationCaptor.getValue()).isEqualTo(classification);
}
@Test
void shouldCallAddAttachments() {
service.getFormData(messageMetaData);
verify(service).addAttachments(message, mappedFormData);
}
@Test
void shouldReturnMappedResult() {
doReturn(mappedFormData).when(service).addAttachments(any(), any());
var result = service.getFormData(messageMetaData);
assertThat(result).isEqualTo(formData);
assertThat(result).isEqualTo(mappedFormData);
}
}
@Nested
class TestAddAttachments {
private final FormData inFormData = FormDataTestFactory.createBuilder().clearAttachments().numberOfAttachments(0).build();
@Test
void shouldAddAttachments() {
var result = service.addAttachments(XtaMessageTestFactory.create(), inFormData);
assertThat(result.getAttachments()).hasSize(1);
assertThat(result.getNumberOfAttachments()).isEqualTo(1);
}
@Test
void shouldWorkWithoutAnyAttachment() {
var result = service.addAttachments(XtaMessageTestFactory.createBuilder().clearAttachments().build(), inFormData);
assertThat(result.getAttachments()).hasSize(0);
assertThat(result.getNumberOfAttachments()).isEqualTo(0);
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment