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

OZG-6049 implement comments from code review

parent 3a4df4bc
No related branches found
No related tags found
No related merge requests found
...@@ -117,25 +117,28 @@ class SmartDocumentsBescheidRemoteService implements BescheidRemoteService { ...@@ -117,25 +117,28 @@ class SmartDocumentsBescheidRemoteService implements BescheidRemoteService {
} }
Optional<String> getNachrichtText(SmartDocumentsResponse response) { Optional<String> getNachrichtText(SmartDocumentsResponse response) {
return getXMLFile(response).flatMap(this::extractTextFormXmlFile); return getXMLFile(response).flatMap(this::extractTextFromXmlFile);
} }
Optional<String> extractTextFormXmlFile(File xmlFile) { Optional<String> extractTextFromXmlFile(File xmlFile) {
try { try {
var document = parseXml(xmlFile); var document = parseXml(xmlFile);
return getNachrichtenText(document).or(() -> getFieldTemplateText(document)).map(Text::getTextContent); if (document.isPresent()) {
} catch (SAXException | IOException | ParserConfigurationException e) { return document.flatMap(this::getNachrichtenText).or(() -> getFieldTemplateText(document.get())).map(Text::getTextContent);
LOG.warn("XML-Parsing error on extracting Nachricht-Text: {}", e.getMessage(), e); }
} catch (ClassCastException e) {
LOG.warn("Error on extraction Nachricht-Text. XPath return unexpected Type.", e);
} catch (RuntimeException e) { } catch (RuntimeException e) {
LOG.warn("Unexpected Error on extracting NachrichtText: {}", e.getMessage(), e); LOG.warn("Unexpected Error on extracting NachrichtText: {}", e.getMessage(), e);
} }
return Optional.empty(); return Optional.empty();
} }
Document parseXml(File xmlFile) throws ParserConfigurationException, IOException, SAXException { Optional<Document> parseXml(File xmlFile) {
return DocumentBuilderFactory.newDefaultInstance().newDocumentBuilder().parse(xmlFile); try {
return Optional.of(DocumentBuilderFactory.newDefaultInstance().newDocumentBuilder().parse(xmlFile));
} catch (SAXException | IOException | ParserConfigurationException e) {
LOG.warn("XML-Parsing error on extracting Nachricht-Text: {}", e.getMessage(), e);
}
return Optional.empty();
} }
Optional<Text> getNachrichtenText(Document document) { Optional<Text> getNachrichtenText(Document document) {
...@@ -150,6 +153,8 @@ class SmartDocumentsBescheidRemoteService implements BescheidRemoteService { ...@@ -150,6 +153,8 @@ class SmartDocumentsBescheidRemoteService implements BescheidRemoteService {
try { try {
var expr = XPathFactory.newInstance().newXPath().compile(xpathExpression); var expr = XPathFactory.newInstance().newXPath().compile(xpathExpression);
return Optional.ofNullable(expr.evaluate(document, XPathConstants.NODE)).map(Text.class::cast); return Optional.ofNullable(expr.evaluate(document, XPathConstants.NODE)).map(Text.class::cast);
} catch (ClassCastException e) {
LOG.warn("Error on extraction Nachricht-Text. XPath return unexpected Type.", e);
} catch (XPathExpressionException e) { } catch (XPathExpressionException e) {
LOG.warn("Cannot evaluate XPath: {}", xpathExpression, e); LOG.warn("Cannot evaluate XPath: {}", xpathExpression, e);
} }
......
...@@ -51,14 +51,14 @@ class SmartDocumentsBescheidRemoteServiceITCase { ...@@ -51,14 +51,14 @@ class SmartDocumentsBescheidRemoteServiceITCase {
@Test @Test
void shouldGetNachrichtenText() { void shouldGetNachrichtenText() {
var nachrichtenText = remoteService.extractTextFormXmlFile(loadFile("SD_answer.xml")); var nachrichtenText = remoteService.extractTextFromXmlFile(loadFile("SD_answer.xml"));
assertThat(nachrichtenText).contains(NACHRICHTEN_TEXT); assertThat(nachrichtenText).contains(NACHRICHTEN_TEXT);
} }
@Test @Test
void shouldGetFieldTemplateText() { void shouldGetFieldTemplateText() {
var fieldTemplateText = remoteService.extractTextFormXmlFile(loadFile("SD_answer_field_template.xml")); var fieldTemplateText = remoteService.extractTextFromXmlFile(loadFile("SD_answer_field_template.xml"));
assertThat(fieldTemplateText).contains(FIELD_TEMPLATE_TEXT); assertThat(fieldTemplateText).contains(FIELD_TEMPLATE_TEXT);
} }
...@@ -67,12 +67,12 @@ class SmartDocumentsBescheidRemoteServiceITCase { ...@@ -67,12 +67,12 @@ class SmartDocumentsBescheidRemoteServiceITCase {
void shouldExpectMissingTextNode() { void shouldExpectMissingTextNode() {
File xmlFileWithoutText = TempFileUtils.writeTmpFile(TestUtils.loadFile("SD_answer_without_text.xml")); File xmlFileWithoutText = TempFileUtils.writeTmpFile(TestUtils.loadFile("SD_answer_without_text.xml"));
var text = remoteService.extractTextFormXmlFile(xmlFileWithoutText); var text = remoteService.extractTextFromXmlFile(xmlFileWithoutText);
assertThat(text).isEmpty(); assertThat(text).isEmpty();
} }
File loadFile(String fileName) { private File loadFile(String fileName) {
return TempFileUtils.writeTmpFile(TestUtils.loadFile(fileName)); return TempFileUtils.writeTmpFile(TestUtils.loadFile(fileName));
} }
} }
......
...@@ -5,7 +5,6 @@ import static org.mockito.ArgumentMatchers.*; ...@@ -5,7 +5,6 @@ import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.Optional; import java.util.Optional;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
...@@ -34,6 +33,8 @@ class SmartDocumentsBescheidRemoteServiceTest { ...@@ -34,6 +33,8 @@ class SmartDocumentsBescheidRemoteServiceTest {
private SmartDocumentsProperties properties; private SmartDocumentsProperties properties;
@Mock @Mock
private Text xmlText; private Text xmlText;
@Mock
private File xmlFile;
@Nested @Nested
class TestBuildBescheid { class TestBuildBescheid {
...@@ -62,12 +63,14 @@ class SmartDocumentsBescheidRemoteServiceTest { ...@@ -62,12 +63,14 @@ class SmartDocumentsBescheidRemoteServiceTest {
@Nested @Nested
class TestGetNachrichtText { class TestGetNachrichtText {
private static final String NACHRICHT_TEXT = "NachrichtText"; @Test
void shouldCallGetXMLFile() {
var response = SmartDocumentsResponseTestFactory.create();
@Mock service.getNachrichtText(response);
private File xmlFile;
@Mock verify(service).getXMLFile(response);
private Document document; }
@Test @Test
void shouldCallExtractText() { void shouldCallExtractText() {
...@@ -75,97 +78,94 @@ class SmartDocumentsBescheidRemoteServiceTest { ...@@ -75,97 +78,94 @@ class SmartDocumentsBescheidRemoteServiceTest {
service.getNachrichtText(SmartDocumentsResponseTestFactory.create()); service.getNachrichtText(SmartDocumentsResponseTestFactory.create());
verify(service).extractTextFormXmlFile(xmlFile); verify(service).extractTextFromXmlFile(xmlFile);
}
} }
@Nested @Nested
class TestExtractingText { class TestExtractTextFromXmlFileSuccessfully {
@Nested private static final String NACHRICHT_TEXT = "NachrichtText";
class TestSuccessfully {
@Mock
private Document document;
@SneakyThrows @SneakyThrows
@BeforeEach @BeforeEach
void init() { void init() {
doReturn(document).when(service).parseXml(any()); doReturn(Optional.of(document)).when(service).parseXml(any());
} }
@SneakyThrows @SneakyThrows
@Test @Test
void shouldCallParseXml() { void shouldCallParseXml() {
service.extractTextFormXmlFile(xmlFile); service.extractTextFromXmlFile(xmlFile);
verify(service).parseXml(xmlFile); verify(service).parseXml(xmlFile);
} }
@Nested
class TestGetNachrichtenText {
@BeforeEach
void init() {
doReturn(Optional.of(xmlText)).when(service).getNachrichtenText(any());
}
@Test @Test
void shouldCallGetNachrichtenText() { void shouldCallGetNachrichtenText() {
service.extractTextFormXmlFile(xmlFile); doReturn(Optional.of(xmlText)).when(service).getNachrichtenText(any());
service.extractTextFromXmlFile(xmlFile);
verify(service).getNachrichtenText(document); verify(service).getNachrichtenText(document);
} }
@Test @Test
void shouldReturnNachrichtenText() { void shouldReturnNachrichtenText() {
doReturn(Optional.of(xmlText)).when(service).getNachrichtenText(any());
when(xmlText.getTextContent()).thenReturn(NACHRICHT_TEXT); when(xmlText.getTextContent()).thenReturn(NACHRICHT_TEXT);
var text = service.extractTextFormXmlFile(xmlFile); var text = service.extractTextFromXmlFile(xmlFile);
assertThat(text).contains(NACHRICHT_TEXT); assertThat(text).contains(NACHRICHT_TEXT);
} }
@Test @Test
void shouldNotCallGetFieldTemplateText() { void shouldNotCallGetFieldTemplateText() {
service.extractTextFormXmlFile(xmlFile); doReturn(Optional.of(xmlText)).when(service).getNachrichtenText(any());
service.extractTextFromXmlFile(xmlFile);
verify(service, never()).getFieldTemplateText(document); verify(service, never()).getFieldTemplateText(document);
} }
}
@Nested @Test
class TestGetFieldTemplateText { void shouldCallGetFieldTemplateText() {
@BeforeEach
void init() {
doReturn(Optional.empty()).when(service).getNachrichtenText(any()); doReturn(Optional.empty()).when(service).getNachrichtenText(any());
doReturn(Optional.of(xmlText)).when(service).getFieldTemplateText(any()); doReturn(Optional.of(xmlText)).when(service).getFieldTemplateText(any());
}
@Test service.extractTextFromXmlFile(xmlFile);
void shouldCallGetFieldTemplateText() {
service.extractTextFormXmlFile(xmlFile);
verify(service).getFieldTemplateText(document); verify(service).getFieldTemplateText(document);
} }
@Test @Test
void shouldReturnFieldTemplateText() { void shouldReturnFieldTemplateText() {
doReturn(Optional.empty()).when(service).getNachrichtenText(any());
doReturn(Optional.of(xmlText)).when(service).getFieldTemplateText(any());
when(xmlText.getTextContent()).thenReturn(NACHRICHT_TEXT); when(xmlText.getTextContent()).thenReturn(NACHRICHT_TEXT);
var text = service.extractTextFormXmlFile(xmlFile); var text = service.extractTextFromXmlFile(xmlFile);
assertThat(text).contains(NACHRICHT_TEXT); assertThat(text).contains(NACHRICHT_TEXT);
} }
} }
}
@Nested @Nested
class TestExtractingFails { class TestExtractTextFormXmlFileFails {
@Mock
private Document document;
@SneakyThrows @SneakyThrows
@Test @Test
void shouldHandleErrorWhenReadingXml() { void shouldHandleMissingXmlDocument() {
doThrow(IOException.class).when(service).parseXml(any()); doReturn(Optional.empty()).when(service).parseXml(any());
var text = service.extractTextFormXmlFile(xmlFile); var text = service.extractTextFromXmlFile(xmlFile);
assertThat(text).isEmpty(); assertThat(text).isEmpty();
} }
...@@ -173,15 +173,13 @@ class SmartDocumentsBescheidRemoteServiceTest { ...@@ -173,15 +173,13 @@ class SmartDocumentsBescheidRemoteServiceTest {
@Test @Test
@SneakyThrows @SneakyThrows
void shouldExpectMissingTextNode() { void shouldExpectMissingTextNode() {
doReturn(document).when(service).parseXml(any()); doReturn(Optional.of(document)).when(service).parseXml(any());
doReturn(Optional.empty()).when(service).getFieldTemplateText(any()); doReturn(Optional.empty()).when(service).getFieldTemplateText(any());
var text = service.extractTextFormXmlFile(xmlFile); var text = service.extractTextFromXmlFile(xmlFile);
assertThat(text).isEmpty(); assertThat(text).isEmpty();
} }
} }
}
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment