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
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,7 @@ import java.util.Objects;
import java.util.Optional;
import de.xima.fc.form.common.items.XItem;
import de.xima.fc.form.common.models.XPropertyValue;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
......@@ -28,27 +29,34 @@ class FormStructureParser {
var xItem = entry.getValue();
var itemClass = ItemClass.fromString(xItem.getClassName());
if (isInputNode(itemClass)) {
addItem(xItem);
handleInputNode(xItem);
} else if (isNestedContainer(itemClass)) {
containerNodes.push(addItem(xItem));
handleContainerNode(xItem);
}
}
return resultNodes;
}
FormNode addItem(XItem xItem) {
void handleInputNode(XItem xItem) {
getResultNodes(xItem).add(buildNode(xItem));
}
void handleContainerNode(XItem xItem) {
var formNode = buildNode(xItem);
getResultNodes(xItem).add(formNode);
return formNode;
containerNodes.push(formNode);
}
FormNode buildNode(XItem xItem) {
var formNode = FormNode.builder().itemId(xItem.getId()).name(xItem.getName());
ItemClass.fromString(xItem.getClassName()).getTitleProperty().map(xItem::get)
.ifPresent(propertyValue -> formNode.title(propertyValue.getString()));
getTitle(xItem).ifPresent(formNode::title);
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) {
if (CONTAINER_NAME_ANTRAGSTELLER.equalsIgnoreCase(xItem.getName()) || containerNodes.isEmpty()) {
return resultNodes;
......
......@@ -26,9 +26,7 @@ package de.ozgcloud.formcycle.formdata;
import static de.ozgcloud.formcycle.formdata.ItemClass.*;
import static de.ozgcloud.formcycle.formdata.StructureMockFactory.*;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
......
......@@ -18,15 +18,12 @@ 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.Spy;
import de.xima.fc.form.common.items.XItem;
import lombok.SneakyThrows;
class FormStructureParserTest {
@Spy
@InjectMocks
private FormStructureParser structureParser;
@Nested
......@@ -43,23 +40,45 @@ class FormStructureParserTest {
}
@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);
structureParser = spy(createParser(items));
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
void shouldCallAddItemWhenContainerNode() {
void shouldCallHandleContainerNode() {
var items = createItem(FIELD_SET);
structureParser = spy(createParser(items));
structureParser.parse();
verify(structureParser).addItem(items.get(ITEM_ID));
verify(structureParser).handleContainerNode(items.get(ITEM_ID));
}
@Test
......@@ -80,13 +99,13 @@ class FormStructureParserTest {
}
@Nested
class TestAddItem {
class TestHandleInputNode {
@Test
void shouldCallGetResultNodes() {
var xItem = getMock(TEXT_FIELD);
structureParser.addItem(xItem);
structureParser.handleInputNode(xItem);
verify(structureParser).getResultNodes(xItem);
}
......@@ -96,11 +115,50 @@ class FormStructureParserTest {
var xItem = getMock(TEXT_FIELD);
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);
}
@Test
void shouldCallGetResultNodes() {
var xItem = getMock(FIELD_SET);
structureParser.handleContainerNode(xItem);
verify(structureParser).getResultNodes(xItem);
}
@Test
void shouldAddNodeToResultNodes() {
var resultNodes = new ArrayList<FormNode>();
......@@ -108,19 +166,30 @@ class FormStructureParserTest {
var formNode = FormNodeTestFactory.create();
doReturn(formNode).when(structureParser).buildNode(any());
structureParser.addItem(getMock(TEXT_FIELD));
structureParser.handleContainerNode(getMock(FIELD_SET));
assertThat(resultNodes).containsExactly(formNode);
}
@Test
void shouldReturnBuiltNode() {
void shouldAddNodeToTopOfContainerNodes() {
var formNode = FormNodeTestFactory.create();
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