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

OZG-5677 [wip] changes from code review

parent 28280b17
Branches
Tags
No related merge requests found
...@@ -11,6 +11,7 @@ import java.util.Objects; ...@@ -11,6 +11,7 @@ import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import de.xima.fc.form.common.items.XItem; import de.xima.fc.form.common.items.XItem;
import de.xima.fc.form.common.models.XPropertyValue;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
...@@ -28,27 +29,34 @@ class FormStructureParser { ...@@ -28,27 +29,34 @@ class FormStructureParser {
var xItem = entry.getValue(); var xItem = entry.getValue();
var itemClass = ItemClass.fromString(xItem.getClassName()); var itemClass = ItemClass.fromString(xItem.getClassName());
if (isInputNode(itemClass)) { if (isInputNode(itemClass)) {
addItem(xItem); handleInputNode(xItem);
} else if (isNestedContainer(itemClass)) { } else if (isNestedContainer(itemClass)) {
containerNodes.push(addItem(xItem)); handleContainerNode(xItem);
} }
} }
return resultNodes; return resultNodes;
} }
FormNode addItem(XItem xItem) { void handleInputNode(XItem xItem) {
getResultNodes(xItem).add(buildNode(xItem));
}
void handleContainerNode(XItem xItem) {
var formNode = buildNode(xItem); var formNode = buildNode(xItem);
getResultNodes(xItem).add(formNode); getResultNodes(xItem).add(formNode);
return formNode; containerNodes.push(formNode);
} }
FormNode buildNode(XItem xItem) { FormNode buildNode(XItem xItem) {
var formNode = FormNode.builder().itemId(xItem.getId()).name(xItem.getName()); var formNode = FormNode.builder().itemId(xItem.getId()).name(xItem.getName());
ItemClass.fromString(xItem.getClassName()).getTitleProperty().map(xItem::get) getTitle(xItem).ifPresent(formNode::title);
.ifPresent(propertyValue -> formNode.title(propertyValue.getString()));
return formNode.build(); return formNode.build();
} }
Optional<String> getTitle(XItem xItem) {
return ItemClass.fromString(xItem.getClassName()).getTitleProperty().map(xItem::get).map(XPropertyValue::getString);
}
List<FormNode> getResultNodes(XItem xItem) { List<FormNode> getResultNodes(XItem xItem) {
if (CONTAINER_NAME_ANTRAGSTELLER.equalsIgnoreCase(xItem.getName()) || containerNodes.isEmpty()) { if (CONTAINER_NAME_ANTRAGSTELLER.equalsIgnoreCase(xItem.getName()) || containerNodes.isEmpty()) {
return resultNodes; return resultNodes;
......
...@@ -26,9 +26,7 @@ package de.ozgcloud.formcycle.formdata; ...@@ -26,9 +26,7 @@ package de.ozgcloud.formcycle.formdata;
import static de.ozgcloud.formcycle.formdata.ItemClass.*; import static de.ozgcloud.formcycle.formdata.ItemClass.*;
import static de.ozgcloud.formcycle.formdata.StructureMockFactory.*; import static de.ozgcloud.formcycle.formdata.StructureMockFactory.*;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
......
...@@ -18,15 +18,12 @@ import org.junit.jupiter.api.DisplayName; ...@@ -18,15 +18,12 @@ import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Spy;
import de.xima.fc.form.common.items.XItem; import de.xima.fc.form.common.items.XItem;
import lombok.SneakyThrows; import lombok.SneakyThrows;
class FormStructureParserTest { class FormStructureParserTest {
@Spy
@InjectMocks
private FormStructureParser structureParser; private FormStructureParser structureParser;
@Nested @Nested
...@@ -43,23 +40,45 @@ class FormStructureParserTest { ...@@ -43,23 +40,45 @@ class FormStructureParserTest {
} }
@Test @Test
void shouldCallAddItemWhenInputNode() { void shouldCallIsInputNode() {
try (var itemClassMock = mockStatic(ItemClass.class)) {
var items = createItem(TEXT_FIELD);
createParser(items).parse();
itemClassMock.verify(() -> ItemClass.isInputNode(TEXT_FIELD));
}
}
@Test
void shouldCallHandleInputNode() {
var items = createItem(TEXT_FIELD); var items = createItem(TEXT_FIELD);
structureParser = spy(createParser(items)); structureParser = spy(createParser(items));
structureParser.parse(); structureParser.parse();
verify(structureParser).addItem(items.get(ITEM_ID)); verify(structureParser).handleInputNode(items.get(ITEM_ID));
}
@Test
void shouldCallIsNestedContainer() {
try (var itemClassMock = mockStatic(ItemClass.class)) {
var items = createItem(FIELD_SET);
createParser(items).parse();
itemClassMock.verify(() -> ItemClass.isNestedContainer(FIELD_SET));
}
} }
@Test @Test
void shouldCallAddItemWhenContainerNode() { void shouldCallHandleContainerNode() {
var items = createItem(FIELD_SET); var items = createItem(FIELD_SET);
structureParser = spy(createParser(items)); structureParser = spy(createParser(items));
structureParser.parse(); structureParser.parse();
verify(structureParser).addItem(items.get(ITEM_ID)); verify(structureParser).handleContainerNode(items.get(ITEM_ID));
} }
@Test @Test
...@@ -80,13 +99,13 @@ class FormStructureParserTest { ...@@ -80,13 +99,13 @@ class FormStructureParserTest {
} }
@Nested @Nested
class TestAddItem { class TestHandleInputNode {
@Test @Test
void shouldCallGetResultNodes() { void shouldCallGetResultNodes() {
var xItem = getMock(TEXT_FIELD); var xItem = getMock(TEXT_FIELD);
structureParser.addItem(xItem); structureParser.handleInputNode(xItem);
verify(structureParser).getResultNodes(xItem); verify(structureParser).getResultNodes(xItem);
} }
...@@ -96,11 +115,50 @@ class FormStructureParserTest { ...@@ -96,11 +115,50 @@ class FormStructureParserTest {
var xItem = getMock(TEXT_FIELD); var xItem = getMock(TEXT_FIELD);
doReturn(new ArrayList<>()).when(structureParser).getResultNodes(any()); doReturn(new ArrayList<>()).when(structureParser).getResultNodes(any());
structureParser.addItem(xItem); structureParser.handleInputNode(xItem);
verify(structureParser).buildNode(xItem);
}
@Test
void shouldAddNodeToResultNodes() {
var resultNodes = new ArrayList<FormNode>();
doReturn(resultNodes).when(structureParser).getResultNodes(any());
var formNode = FormNodeTestFactory.create();
doReturn(formNode).when(structureParser).buildNode(any());
structureParser.handleInputNode(getMock(TEXT_FIELD));
assertThat(resultNodes).containsExactly(formNode);
}
}
@Nested
class TestHandleContainerNode {
@BeforeEach
void init() {
structureParser = spy(new FormStructureParser(createItem(FIELD_SET)));
}
@Test
void shouldCallBuildNode() {
var xItem = getMock(FIELD_SET);
structureParser.handleContainerNode(xItem);
verify(structureParser).buildNode(xItem); verify(structureParser).buildNode(xItem);
} }
@Test
void shouldCallGetResultNodes() {
var xItem = getMock(FIELD_SET);
structureParser.handleContainerNode(xItem);
verify(structureParser).getResultNodes(xItem);
}
@Test @Test
void shouldAddNodeToResultNodes() { void shouldAddNodeToResultNodes() {
var resultNodes = new ArrayList<FormNode>(); var resultNodes = new ArrayList<FormNode>();
...@@ -108,19 +166,30 @@ class FormStructureParserTest { ...@@ -108,19 +166,30 @@ class FormStructureParserTest {
var formNode = FormNodeTestFactory.create(); var formNode = FormNodeTestFactory.create();
doReturn(formNode).when(structureParser).buildNode(any()); doReturn(formNode).when(structureParser).buildNode(any());
structureParser.addItem(getMock(TEXT_FIELD)); structureParser.handleContainerNode(getMock(FIELD_SET));
assertThat(resultNodes).containsExactly(formNode); assertThat(resultNodes).containsExactly(formNode);
} }
@Test @Test
void shouldReturnBuiltNode() { void shouldAddNodeToTopOfContainerNodes() {
var formNode = FormNodeTestFactory.create(); var formNode = FormNodeTestFactory.create();
doReturn(formNode).when(structureParser).buildNode(any()); doReturn(formNode).when(structureParser).buildNode(any());
var parentNode = injectContainerNodes();
var fieldSetMock = getMock(FIELD_SET);
when(fieldSetMock.getParentId()).thenReturn(parentNode.getFirst().getItemId());
structureParser.handleContainerNode(fieldSetMock);
var result = structureParser.addItem(getMock(TEXT_FIELD)); assertThat(getContainerNodes()).first().isSameAs(formNode);
}
assertThat(result).isSameAs(formNode); @SuppressWarnings("unchecked")
@SneakyThrows
private Deque<FormNode> getContainerNodes() {
var containerNodesField = FormStructureParser.class.getDeclaredField("containerNodes");
containerNodesField.setAccessible(true);
return (Deque<FormNode>) containerNodesField.get(structureParser);
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment