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

OZG-3260 fix/cleanup FormSolutionsAntragstellerMappr

parent 25f55552
Branches
Tags
No related merge requests found
......@@ -26,6 +26,7 @@ package de.itvsh.kop.eingangsadapter.semantik.enginebased;
import static de.itvsh.kop.eingangsadapter.semantik.enginebased.FormSolutionsEngineBasedAdapter.*;
import static de.itvsh.kop.eingangsadapter.semantik.enginebased.FormSolutionsPanelMapper.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -38,60 +39,76 @@ import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
@Component
public class FormSolutionsAntragstellerMapper implements FormSolutionsEngineBasedMapper {
public static final String ANTRAGSTELLER_PANEL_IDENTIFIER = "Antragstellende Person";
public static final String POSTKORBHANDLE = "postkorbhandle";
public static final String VORNAME_KEY = "AS_Vorname";
public static final String NACHNAME_KEY = "AS_Name";
@Override
public FormData parseFormData(FormData formData) {
var cleanedData = removePostkorbhandle(formData);
Antragsteller.AntragstellerBuilder builder = Antragsteller.builder()
.postfachId((String) formData.getFormData().get(POSTKORBHANDLE));
return formData.toBuilder()
.antragsteller(buildAntragsteller(formData))
.formData(removeProcessedData(formData))
.build();
}
Antragsteller buildAntragsteller(FormData formData) {
var antragstellerData = findAntragstellerData(formData.getFormData());
findValueByKey(NACHNAME_KEY, antragstellerData).ifPresent(builder::nachname);
return Antragsteller.builder()
.postfachId(getPostkorbhandle(formData))
.vorname(getVorname(antragstellerData))
.nachname(getNachname(antragstellerData))
.build();
}
private String getVorname(Map<String, String> antragstellerData) {
return Optional.ofNullable(antragstellerData.get(VORNAME_KEY)).orElse(null);
}
findValueByKey(VORNAME_KEY, antragstellerData).ifPresent(builder::vorname);
private String getNachname(Map<String, String> antragstellerData) {
return Optional.ofNullable(antragstellerData.get(NACHNAME_KEY)).orElse(null);
}
return formData.toBuilder()
.antragsteller(builder.build())
.formData(cleanedData)
.build();
private String getPostkorbhandle(FormData formData) {
return (String) formData.getFormData().get(POSTKORBHANDLE);
}
private Map<String, String> findAntragstellerData(Map<String, Object> formData) {
Map<String, String> names = new HashMap<>();
addContent(getPanels(formData), names);
var names = new HashMap<String, String>();
addContent(getAssistantPanels(formData), names);
return names;
}
private Optional<String> findValueByKey(String key, Map<String, String> data) {
return Optional.ofNullable(data.get(key));
private void addContent(List<Map<String, Object>> panels, Map<String, String> names) {
panels.stream().forEach(entry -> handleContentEntry(entry, names));
}
@SuppressWarnings("unchecked")
private List<Map<String, Object>> getPanels(Map<String, Object> formData) {
return ((List<Map<String, Object>>) ((Map<String, Object>) formData.get(ASSISTANT)).get(PANELS));
private void handleContentEntry(Map<String, Object> entry, Map<String, String> names) {
if (entry.containsKey(COMPONENTS)) {
addContent(getComponentList(entry), names);
} else if (entry.containsKey(STRING_VALUE)) {
names.put((String) entry.get(IDENTIFIER), (String) entry.get(STRING_VALUE));
}
}
@SuppressWarnings("unchecked")
private void addContent(List<Map<String, Object>> items, Map<String, String> names) {
items.stream().forEach(entry -> {
if (entry.containsKey(COMPONENTS)) {
addContent((List<Map<String, Object>>) entry.get(COMPONENTS), names);
} else if (entry.containsKey(STRING_VALUE)) {
names.put((String) entry.get(IDENTIFIER), (String) entry.get(STRING_VALUE));
}
});
private List<Map<String, Object>> getComponentList(Map<String, Object> entry) {
return (List<Map<String, Object>>) entry.get(COMPONENTS);
}
private Map<String, Object> removePostkorbhandle(FormData processedData) {
Map<String, Object> cleanedData = new HashMap<>(processedData.getFormData());
cleanedData.remove(POSTKORBHANDLE);
return cleanedData;
@SuppressWarnings("unchecked")
private List<Map<String, Object>> getAssistantPanels(Map<String, Object> formData) {
return ((List<Map<String, Object>>) ((Map<String, Object>) formData.get(ASSISTANT)).get(PANELS));
}
Map<String, Object> removeProcessedData(FormData formData) {
var formDataMap = new HashMap<String, Object>(formData.getFormData());
formDataMap.remove(POSTKORBHANDLE);
return Collections.unmodifiableMap(formDataMap);
}
}
......@@ -24,44 +24,93 @@
package de.itvsh.kop.eingangsadapter.semantik.enginebased;
import static de.itvsh.kop.eingangsadapter.common.formdata.AntragstellerTestFactory.*;
import static de.itvsh.kop.eingangsadapter.semantik.enginebased.FormSolutionsAntragstellerMapper.*;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.Spy;
import de.itvsh.kop.eingangsadapter.common.formdata.Antragsteller;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
class FormSolutionsAntragstellerMapperTest {
private FormSolutionsAntragstellerMapper mapper = new FormSolutionsAntragstellerMapper();
@Spy
private final FormSolutionsAntragstellerMapper mapper = new FormSolutionsAntragstellerMapper();
@DisplayName("Parse formData")
@Nested
class TestAntragstellerMapping {
class TestParseFormData {
private final FormData formData = FormSolutionsAntragstellerTestFactory.create();
@Test
void shouldParsePostfachId() {
var formData = mapper.parseFormData(FormSolutionsAntragstellerTestFactory.create());
void shouldCallBuildAntragsteller() {
parseFormData();
assertThat(formData.getAntragsteller().getPostfachId())
.isEqualTo(POSTFACH_ID);
verify(mapper).buildAntragsteller(formData);
}
@Test
void shouldParseVorname() {
var formData = mapper.parseFormData(FormSolutionsAntragstellerTestFactory.create());
void shouldCallRemoveProcessedData() {
parseFormData();
assertThat(formData.getAntragsteller().getVorname()).isEqualTo(VORNAME);
verify(mapper).buildAntragsteller(formData);
}
@Test
void shouldParseNachname() {
var formData = mapper.parseFormData(FormSolutionsAntragstellerTestFactory.create());
void shouldReturnValue() {
var result = parseFormData();
assertThat(formData.getAntragsteller().getNachname()).isEqualTo(NACHNAME);
assertThat(result).usingRecursiveComparison().ignoringFields("antragsteller", "formData").isEqualTo(formData);
}
@Test
void shouldRemovedParsedPostfachId() {
var formData = mapper.parseFormData(FormSolutionsAntragstellerTestFactory.create());
private FormData parseFormData() {
return mapper.parseFormData(formData);
}
@DisplayName("build antragsteller")
@Nested
class TestBuildAntragsteller {
@Test
void shouldHavePostfachId() {
var antragsteller = buildAntragsteller();
assertThat(antragsteller.getPostfachId()).isEqualTo(POSTFACH_ID);
}
@Test
void shouldHaveVorname() {
var antragsteller = buildAntragsteller();
assertThat(antragsteller.getVorname()).isEqualTo(VORNAME);
}
@Test
void shouldHaveNachname() {
var antragsteller = buildAntragsteller();
assertThat(antragsteller.getNachname()).isEqualTo(NACHNAME);
}
private Antragsteller buildAntragsteller() {
return mapper.buildAntragsteller(formData);
}
}
@DisplayName("remove processed data")
@Nested
class TestRemoveProcessedData {
@Test
void shouldRemovePostkorbhandle() {
var formDataMap = mapper.removeProcessedData(formData);
assertThat(formData.getFormData().get(POSTKORBHANDLE)).isNull();
assertThat(formDataMap).doesNotContainKey(FormSolutionsAntragstellerMapper.POSTKORBHANDLE);
}
}
}
}
}
\ No newline at end of file
......@@ -34,23 +34,30 @@ import java.util.Map;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
class FormSolutionsAntragstellerTestFactory {
static final String ANTRAGSTELLER_NAME_PANEL_IDENTIFIER = "AS_Name1";
static final List<Map<String, Object>> ANTRAGSTELLER_PANEL_CONTENT = List.of(
Map.of(IDENTIFIER, ANTRAGSTELLER_NAME_PANEL_IDENTIFIER),
Map.of(COMPONENTS, List.of(
Map.of(IDENTIFIER, VORNAME_KEY, STRING_VALUE, VORNAME),
Map.of(IDENTIFIER, NACHNAME_KEY, STRING_VALUE, NACHNAME))));
static final List<Map<String, Object>> PANELS_CONTENT = List.of(
Map.of(IDENTIFIER, ANTRAGSTELLER_PANEL_IDENTIFIER),
Map.of(COMPONENTS, ANTRAGSTELLER_PANEL_CONTENT));
static final Map<String, Object> ANTRAGSTELLER_DATA = Map.of(PANELS, PANELS_CONTENT);
static final String ANTRAGSTELLER_NAME_PANEL_IDENTIFIER = "AS_Name1";
public static FormData create() {
return createBuilder().build();
}
public static FormData.FormDataBuilder createBuilder() {
return FormData.builder().formData(Map.of(FormSolutionsAntragstellerMapper.POSTKORBHANDLE, POSTFACH_ID, ASSISTANT, ANTRAGSTELLER_DATA));
return FormData.builder().formData(Map.of(
FormSolutionsAntragstellerMapper.POSTKORBHANDLE, POSTFACH_ID,
ASSISTANT, createAssistantMap()));
}
private static Map<String, Object> createAssistantMap() {
return Map.of(PANELS, List.of(
Map.of(IDENTIFIER, ANTRAGSTELLER_PANEL_IDENTIFIER),
Map.of(COMPONENTS, createAntragstellerPanelContentList())));
}
private static List<Map<String, Object>> createAntragstellerPanelContentList() {
return List.of(
Map.of(IDENTIFIER, ANTRAGSTELLER_NAME_PANEL_IDENTIFIER),
Map.of(COMPONENTS, List.of(
Map.of(IDENTIFIER, VORNAME_KEY, STRING_VALUE, VORNAME),
Map.of(IDENTIFIER, NACHNAME_KEY, STRING_VALUE, NACHNAME))));
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment