diff --git a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapter.java b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapter.java index 4ca23cd04339e284416000190b190b30100206a3..4eab80ffbca842cd543facc2de7659b94c554e6a 100644 --- a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapter.java +++ b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapter.java @@ -23,6 +23,8 @@ */ package de.itvsh.kop.eingangsadapter.semantik.enginebased; +import java.util.Collections; +import java.util.HashMap; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; @@ -30,7 +32,9 @@ import org.springframework.beans.factory.annotation.Autowired; import de.itvsh.kop.eingangsadapter.common.formdata.FormData; public class FormSolutionsEngineBasedAdapter implements EngineBasedSemantikAdapter { + public static final String IDENTIFIER = "identifier"; + public static final String ASSISTANT = "assistant"; public static final String ANLIEGEN_ID = "anliegenId"; public static final String KOMMUNALVERWALTUNG_ID = "kommunalverwaltungId"; @@ -42,18 +46,19 @@ public class FormSolutionsEngineBasedAdapter implements EngineBasedSemantikAdapt public FormData parseFormData(FormData formData) { var processedFormData = formData; - for (FormSolutionsEngineBasedMapper mapper : mappers) { + for (var mapper : mappers) { processedFormData = mapper.parseFormData(processedFormData); } - removeProcessedRawData(processedFormData); - - return processedFormData; + return removeProcessedData(processedFormData); } - void removeProcessedRawData(FormData processedFormData) { - processedFormData.getFormData().remove(ASSISTANT); - processedFormData.getFormData().remove(ANLIEGEN_ID); - processedFormData.getFormData().remove(KOMMUNALVERWALTUNG_ID); + FormData removeProcessedData(FormData formData) { + var formDataMap = new HashMap<String, Object>(formData.getFormData()); + formDataMap.remove(ASSISTANT); + formDataMap.remove(ANLIEGEN_ID); + formDataMap.remove(KOMMUNALVERWALTUNG_ID); + + return formData.toBuilder().formData(Collections.unmodifiableMap(formDataMap)).build(); } } diff --git a/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapterTest.java b/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapterTest.java index db0d59b2443f171bceb2725a802bc38b02947914..57251ef748719cacfc59dd2ae5ac9c0a23e55e82 100644 --- a/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapterTest.java +++ b/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapterTest.java @@ -29,62 +29,88 @@ import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.util.Collections; -import java.util.HashMap; 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.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Spy; import org.springframework.test.util.ReflectionTestUtils; import de.itvsh.kop.eingangsadapter.common.formdata.FormData; class FormSolutionsEngineBasedAdapterTest { + @Spy @InjectMocks private FormSolutionsEngineBasedAdapter adapter; @Mock private FormSolutionsEngineBasedMapper mapper; - private FormData formData = FormSolutionsEngineBasedAdapterTestFactory.createIncommingDataBuilder().build(); - - @BeforeEach - void mockMapper() { - when(mapper.parseFormData(any())).thenReturn(formData.toBuilder().formData(new HashMap<String, Object>()).build()); - var mappers = Collections.singletonList(mapper); - ReflectionTestUtils.setField(adapter, "mappers", mappers); - } - + @DisplayName("Parse formData") @Nested class TestParseFormData { + private final FormData formData = FormSolutionsEngineBasedAdapterTestFactory.create(); + + @BeforeEach + void mockMappers() { + ReflectionTestUtils.setField(adapter, "mappers", Collections.singletonList(mapper)); + } + @Test void shouldCallMappers() { + when(mapper.parseFormData(any())).thenReturn(formData); + adapter.parseFormData(formData); verify(mapper).parseFormData(formData); } - } - - @Nested - class TestRemove { @Test - void shouldRemoveRoot() { - var parsed = adapter.parseFormData(formData); + void shouldCallRemoveProcessedRawData() { + when(mapper.parseFormData(any())).thenReturn(formData); - assertThat(parsed.getFormData().get(ASSISTANT)).isNull(); + adapter.parseFormData(formData); + verify(adapter).removeProcessedData(formData); } @Test - void shouldRemoveKnownUnmapped() { - var parsed = adapter.parseFormData(formData); + void shouldReturnValue() { + doReturn(formData).when(adapter).removeProcessedData(any()); + + var result = adapter.parseFormData(formData); + + assertThat(result).isEqualTo(formData); + } + + @DisplayName("remove processed data") + @Nested + class TestRemoveProcessedData { + + @Test + void shouldRemoveAssistant() { + var cleanedFormData = adapter.removeProcessedData(formData); + + assertThat(cleanedFormData.getFormData()).doesNotContainKey(ASSISTANT); + } + + @Test + void shouldRemoveAnliegenId() { + var cleanedFormData = adapter.removeProcessedData(formData); + + assertThat(cleanedFormData.getFormData()).doesNotContainKey(ANLIEGEN_ID); + } - assertThat(parsed.getFormData().get(KOMMUNALVERWALTUNG_ID)).isNull(); - assertThat(parsed.getFormData().get(ANLIEGEN_ID)).isNull(); + @Test + void shouldRemoveKommunalVerwaltungId() { + var cleanedFormData = adapter.removeProcessedData(formData); + assertThat(cleanedFormData.getFormData()).doesNotContainKey(KOMMUNALVERWALTUNG_ID); + } } } } \ No newline at end of file diff --git a/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapterTestFactory.java b/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapterTestFactory.java index c2cf7aea78993206b3fa5eff4056361f16aeb638..ea0e9dc201b0b7398c4b73009cafe3c8e4c98933 100644 --- a/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapterTestFactory.java +++ b/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapterTestFactory.java @@ -32,34 +32,38 @@ import de.itvsh.kop.eingangsadapter.common.formdata.FormData; import de.itvsh.kop.eingangsadapter.common.formdata.FormDataTestFactory; class FormSolutionsEngineBasedAdapterTestFactory { - public static final String ROOT = ASSISTANT; - public static final String ROOT_IDENTIFIER = IDENTIFIER; - public static final String ROOT_IDENTIFIER_VALUE = "root"; - public static final String PANELS = FormSolutionsPanelMapper.PANELS; - public static final String PANELS_IDENTIFIER = IDENTIFIER; - public static final String PANELS_IDENTIFIER_VALUE = "panels"; - public static final String COMPONENTS = FormSolutionsPanelMapper.COMPONENTS; - public static final String COMPONENTS_IDENTIFIER = IDENTIFIER; + public static final String ANLIEGEN_ID_VALUE = "1234"; public static final String KOMMUNALVERWALTUNG_ID_VALUE = "100000000"; + public static final String ASSISTANT_IDENTIFIER_VALUE = "root"; + public static final String PANELS_IDENTIFIER_VALUE = "panels"; + public static FormData create() { return createBuilder().build(); } public static FormData.FormDataBuilder createBuilder() { - return FormDataTestFactory.createBuilder(); + return FormDataTestFactory.createBuilder() + .formData(createFormDataMap()); + } + + private static Map<String, Object> createFormDataMap() { + return Map.of( + ASSISTANT, createAssistantMap(), + ANLIEGEN_ID, ANLIEGEN_ID_VALUE, + KOMMUNALVERWALTUNG_ID, KOMMUNALVERWALTUNG_ID_VALUE); + } + + private static Map<String, Object> createAssistantMap() { + return Map.of( + IDENTIFIER, ASSISTANT_IDENTIFIER_VALUE, + FormSolutionsPanelMapper.PANELS, List.of(createPanelMap())); } - public static FormData.FormDataBuilder createIncommingDataBuilder() { - return FormData.builder() - .formData(Map.of(ROOT, - Map.of( - ROOT_IDENTIFIER, ROOT_IDENTIFIER_VALUE, - PANELS, List.of(Map.of( - PANELS_IDENTIFIER, PANELS_IDENTIFIER_VALUE, - COMPONENTS, FormDataTestFactory.NESTED_LIST_WITH_OBJECTS))), - ANLIEGEN_ID, ANLIEGEN_ID_VALUE, - KOMMUNALVERWALTUNG_ID, KOMMUNALVERWALTUNG_ID_VALUE)); + private static Map<String, Object> createPanelMap() { + return Map.of( + IDENTIFIER, PANELS_IDENTIFIER_VALUE, + FormSolutionsPanelMapper.COMPONENTS, FormDataTestFactory.NESTED_LIST_WITH_OBJECTS); } } \ No newline at end of file