diff --git a/common/src/main/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplier.java b/common/src/main/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplier.java index 510b7c92779fa39758cf3da4855a7af4dec20fe1..29b9ca971b5aa597a7df76abdc2537562202ad59 100644 --- a/common/src/main/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplier.java +++ b/common/src/main/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplier.java @@ -5,6 +5,7 @@ import java.time.LocalDate; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.stereotype.Component; +import de.ozgcloud.common.errorhandling.TechnicalException; import lombok.RequiredArgsConstructor; @Component @@ -17,10 +18,17 @@ public class VorgangNummerSupplier { static final int SUFFIX_LENGTH = 6; public String get() { + return get(SUFFIX_LENGTH); + } + + public String get(int suffixLength) { + if (suffixLength <1){ + throw new TechnicalException("Suffix length must be at least 1"); + } var today = LocalDate.now(); var lastYearNumber = today.getYear() % 10; return VORGANGNUMMER_TEMPLATE.formatted(lastYearNumber, today.getMonthValue(), today.getDayOfMonth(), - RandomStringUtils.random(SUFFIX_LENGTH, BASE30_ALPHABET)); + RandomStringUtils.random(suffixLength, BASE30_ALPHABET)); } } diff --git a/common/src/test/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplierTest.java b/common/src/test/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplierTest.java index 2fc9a524f5e23d2bebd9721eb5612d96ad879782..fa604a63010e2b45ef5fb16d76438c870ced4603 100644 --- a/common/src/test/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplierTest.java +++ b/common/src/test/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplierTest.java @@ -1,18 +1,20 @@ package de.ozgcloud.eingang.common.vorgang; import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; import java.time.LocalDate; -import java.util.Random; import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.InjectMocks; -import org.mockito.Mock; import org.mockito.Spy; -import org.springframework.test.util.ReflectionTestUtils; + +import de.ozgcloud.common.errorhandling.TechnicalException; class VorgangNummerSupplierTest { @@ -26,7 +28,25 @@ class VorgangNummerSupplierTest { void shouldAddSuffix() { var result = vorgangNummerSupplier.get(); - assertThat(result).hasSize(11); + assertThat(getSuffix(result)).hasSize(VorgangNummerSupplier.SUFFIX_LENGTH); + } + + @Test + void shouldHaveSuffixSize() { + var result = vorgangNummerSupplier.get(3); + + assertThat(getSuffix(result)).hasSize(3); + } + + @DisplayName("should throw exception when") + @ParameterizedTest(name = "suffix length {0}") + @ValueSource(ints = { -1, 0 }) + void shouldThrowException(int suffixLength) { + assertThrows(TechnicalException.class, () -> vorgangNummerSupplier.get(suffixLength)); + } + + private String getSuffix(String string) { + return string.substring(string.indexOf('-') + 1); } @Test diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java index 0fe6d495bf3382335bbb41a8fc186feeb30ba300..9e60b84b7ac4ba0dafc491ae1d80742a4d002d58 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java @@ -9,6 +9,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.FormHeader; +import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier; import lombok.NonNull; import lombok.extern.log4j.Log4j2; @@ -17,11 +19,14 @@ import lombok.extern.log4j.Log4j2; class XtaService { static final String DFOERDERMITTELANTRAG_MESSAGE_TYPE = "Geschaeftsgang.Geschaeftsgang.0201"; + static final int VORGANG_NUMMER_SUFFIX_LENGTH = 4; @Autowired private XtaRemoteService remoteService; @Autowired private XtaMessageMapper mapper; + @Autowired + private VorgangNummerSupplier vorgangNummerSupplier; public Stream<FormData> getMessages() { return createXtaMessageStream().filter(this::filterByMessageType).map(this::getFormData); @@ -45,7 +50,16 @@ class XtaService { public FormData getFormData(@NonNull XtaMessageMetaData metaData) { var msg = remoteService.getMessage(metaData.getMessageId()); - return mapper.toFormData(msg.toBuilder().metaData(metaData).build()); + var formData = mapper.toFormData(msg.toBuilder().metaData(metaData).build()); + return updateHeader(formData); + } + + FormData updateHeader(FormData formData) { + return formData.toBuilder().header(setVorgangNummer(formData.getHeader())).build(); + } + + FormHeader setVorgangNummer(FormHeader formHeader) { + return formHeader.toBuilder().vorgangNummer(vorgangNummerSupplier.get(VORGANG_NUMMER_SUFFIX_LENGTH)).build(); } public void acknowledgeReceive(@NonNull XtaMessageId messageId) { diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java index 643602f8918e4082a2c71cc0cf6223a79945a596..d1fc3de86803ba5fc9c49a574011b41adf8e3be0 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java @@ -6,6 +6,7 @@ import static org.mockito.Mockito.*; import java.util.stream.Stream; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -15,6 +16,9 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier; + class XtaServiceTest { private static final String MESSAGE_TYPE_OTHER = "MESSAGE_TYPE_OTHER"; @@ -27,6 +31,8 @@ class XtaServiceTest { private XtaRemoteService remoteService; @Mock private XtaMessageMapper mapper; + @Mock + private VorgangNummerSupplier vorgangNummerSupplier; @Nested class TestGetMessagesAsFormData { @@ -49,6 +55,7 @@ class XtaServiceTest { @Test void shouldCallFilterByMessageType() { + when(mapper.toFormData(any())).thenReturn(FormDataTestFactory.create()); when(remoteService.getMessage(any(XtaMessageId.class))).thenReturn(message); service.getMessages().toList(); @@ -58,6 +65,7 @@ class XtaServiceTest { @Test void shouldCallGetFormData() { + when(mapper.toFormData(any())).thenReturn(FormDataTestFactory.create()); when(remoteService.getMessage(any(XtaMessageId.class))).thenReturn(message); doReturn(true).when(service).filterByMessageType(messageMetaData); @@ -101,6 +109,8 @@ class XtaServiceTest { @Captor private ArgumentCaptor<XtaMessage> messageCaptor; + @Mock + private FormData formData; @BeforeEach void init() { @@ -109,6 +119,8 @@ class XtaServiceTest { @Test void shouldCallRemoteService() { + doReturn(formData).when(service).updateHeader(any()); + service.getFormData(XtaMessageMetaDataTestFactory.create()); verify(remoteService).getMessage(XtaMessageTestFactory.MESSAGE_ID); @@ -116,6 +128,8 @@ class XtaServiceTest { @Test void shouldCallMapper() { + doReturn(formData).when(service).updateHeader(any()); + service.getFormData(XtaMessageMetaDataTestFactory.create()); verify(mapper).toFormData(any()); @@ -123,7 +137,9 @@ class XtaServiceTest { @Test void shouldHaveMetaData() { + doReturn(formData).when(service).updateHeader(any()); XtaMessageMetaData metaData = XtaMessageMetaDataTestFactory.create(); + service.getFormData(metaData); verify(mapper).toFormData(messageCaptor.capture()); @@ -134,6 +150,7 @@ class XtaServiceTest { void shouldReturnMappedResult() { var mapped = FormDataTestFactory.create(); when(mapper.toFormData(any())).thenReturn(mapped); + doReturn(mapped).when(service).updateHeader(any()); var result = service.getFormData(XtaMessageMetaDataTestFactory.create()); @@ -141,6 +158,50 @@ class XtaServiceTest { } } + @Nested + class TestUpdateHeader { + + @Test + void shouldCallSetVorgangNummer() { + var formData = FormDataTestFactory.create(); + + service.updateHeader(formData); + + verify(service).setVorgangNummer(formData.getHeader()); + } + + @Test + void shouldSetUpdatedHeader() { + var updatedHeader = FormHeaderTestFactory.create(); + doReturn(updatedHeader).when(service).setVorgangNummer(any()); + + var result = service.updateHeader(FormDataTestFactory.create()); + + Assertions.assertThat(result.getHeader()).isSameAs(updatedHeader); + } + } + + @Nested + class TestSetVorgangNummer { + + @Test + void shouldCallVorgangNummerSupplier() { + service.setVorgangNummer(FormHeaderTestFactory.create()); + + verify(vorgangNummerSupplier).get(XtaService.VORGANG_NUMMER_SUFFIX_LENGTH); + } + + @Test + void shouldSetVorgangNummer() { + var vorgangNummer = "vorgang-1"; + when(vorgangNummerSupplier.get(anyInt())).thenReturn(vorgangNummer); + + var result = service.setVorgangNummer(FormHeaderTestFactory.create()); + + assertThat(result.getVorgangNummer()).isEqualTo(vorgangNummer); + } + } + @Nested class TestAcknowledgeReceive {