diff --git a/pom.xml b/pom.xml index 83ac3790f8fe729a395987303ec8b7403faec641..25296a021777ebce52966784a7d321190db7631e 100644 --- a/pom.xml +++ b/pom.xml @@ -181,7 +181,7 @@ <goal>single</goal> </goals> <configuration> - <finalName>${project.artifactId}</finalName> + <finalName>${project.artifactId}-${project.version}</finalName> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> diff --git a/src/main/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapper.java b/src/main/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapper.java index 59d4cc78689f81ebf980ce93272d2b962b22dbc8..136db664a3b30887b36495e588f14e9b176d5fef 100644 --- a/src/main/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapper.java +++ b/src/main/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapper.java @@ -47,12 +47,12 @@ public class OzgCloudFormDataMapper { static final String SERVICEKONTO_VERSION = "1"; public FormCycleFormData map(FormData formData) { - return FormCycleFormData.newBuilder() + var formcycleFormDataBuilder = FormCycleFormData.newBuilder() .setHeader(buildHeader(formData)) - .setServiceKonto(buildServiceKonto(formData)) .setFormData(mapToGrpcFormData(formData)) - .addAttachmentGroup(mapToAttachmentGroup(formData)) - .build(); + .addAttachmentGroup(mapToAttachmentGroup(formData)); + formData.getPostkorbId().map(postkorbId -> buildServiceKonto(formData)).ifPresent(formcycleFormDataBuilder::setServiceKonto); + return formcycleFormDataBuilder.build(); } FormCycleAttachmentGroup mapToAttachmentGroup(FormData formData) { diff --git a/src/main/java/de/ozgcloud/formcycle/formdata/PluginFormDataAdapter.java b/src/main/java/de/ozgcloud/formcycle/formdata/PluginFormDataAdapter.java index 10b623b9bb9c64476be6312ab6d7c6660f7c7b08..0979658ab94dd64fbb50ab8c7d7b00d5a9b84b97 100644 --- a/src/main/java/de/ozgcloud/formcycle/formdata/PluginFormDataAdapter.java +++ b/src/main/java/de/ozgcloud/formcycle/formdata/PluginFormDataAdapter.java @@ -23,6 +23,7 @@ package de.ozgcloud.formcycle.formdata; import static java.util.Objects.*; +import static org.apache.commons.lang3.StringUtils.*; import java.util.ArrayList; import java.util.Arrays; @@ -33,7 +34,9 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.function.Predicate; +import java.util.regex.Pattern; import java.util.stream.Collectors; +import java.util.stream.Stream; import de.xima.fc.interfaces.form.IFormDataAdapter; import de.xima.fc.interfaces.workflow.execution.IWorkflowExecutionEnvironmentData; @@ -43,6 +46,8 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class PluginFormDataAdapter { + + private static final Pattern FORMCYCLE_PLACEHOLDER = Pattern.compile("^\\[%\\s*\\$.+%]$"); private static final boolean AS_FIELD_NAME = false; private static final String TEXT_KEY = "text"; static final String POSTKORB_FORM_KEY = "PostboxId"; @@ -137,7 +142,15 @@ public class PluginFormDataAdapter { Optional<String> getPostkorbId() { return Optional.ofNullable(getFormDataAdapter().getFieldValues(POSTKORB_FORM_KEY)) - .flatMap(list -> list.stream().flatMap(Arrays::stream).findFirst()); + .flatMap(this::extractPostkorbId); + } + + Optional<String> extractPostkorbId(List<String[]> values) { + return values.stream().flatMap(Stream::of).filter(this::isValidPostkorbId).findFirst(); + } + + boolean isValidPostkorbId(String postkorbId) { + return isNotBlank(postkorbId) && !FORMCYCLE_PLACEHOLDER.matcher(postkorbId).matches(); } private String getFormName() { diff --git a/src/test/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapperTest.java b/src/test/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapperTest.java index a46de1298d238e3ff98fcb75b3f9963301d7bc22..90df659e18d28bf42d18b734be73c6fbff5ff927 100644 --- a/src/test/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapperTest.java +++ b/src/test/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapperTest.java @@ -29,6 +29,7 @@ import static org.mockito.Mockito.*; import java.util.Collections; import java.util.List; +import java.util.Optional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -274,6 +275,16 @@ class OzgCloudFormDataMapperTest { assertThat(ozgFormData.getServiceKonto()).isEqualTo(serviceKonto); } + @Test + @DisplayName("should not set service konto if postkorbId not set") + void shouldNotSetServiceKonto() { + var formDate = FormDataTestFactory.createBuilder().postkorbId(Optional.empty()).build(); + + var ozgFormData = mapper.map(formDate); + + assertThat(ozgFormData.getServiceKonto()).isEqualTo(FormCycleServiceKonto.getDefaultInstance()); + } + @Test void shouldSetAttachments() { FormCycleAttachmentGroup attachmentGroup = mock(FormCycleAttachmentGroup.class); @@ -345,6 +356,7 @@ class OzgCloudFormDataMapperTest { class TestServiceKonto { private final FormData formData = FormDataTestFactory.create(); + @Test void shouldSetServiceKontoType() { var serviceKonto = mapper.buildServiceKonto(formData); diff --git a/src/test/java/de/ozgcloud/formcycle/formdata/PluginFormDataAdapterTest.java b/src/test/java/de/ozgcloud/formcycle/formdata/PluginFormDataAdapterTest.java index 44a3971df4b968dd257b63a43f896006a1bf4f33..678cae727d42f8bcd165d06fb846a23c6fca4d16 100644 --- a/src/test/java/de/ozgcloud/formcycle/formdata/PluginFormDataAdapterTest.java +++ b/src/test/java/de/ozgcloud/formcycle/formdata/PluginFormDataAdapterTest.java @@ -42,6 +42,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.NullSource; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; @@ -440,6 +443,21 @@ class PluginFormDataAdapterTest { assertThat(postkorbId).isEmpty(); } + + } + + @Nested + class TestPostkorbIdValidation { + + @DisplayName("should return FALSE when") + @ParameterizedTest(name = "postkorbId is \"{0}\"") + @NullSource + @ValueSource(strings = {"", "[%$id%]", "[% $id%]", "[%$id %]", "[% $id %]"}) + void shouldFilterOutEmptyValues(String postkorbId) { + var isValid = adapter.isValidPostkorbId(postkorbId); + + assertThat(isValid).isFalse(); + } } @Nested