summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2023-03-23 13:29:09 +0100
committerPaul-Christian Volkmer2023-03-23 13:56:04 +0100
commit36e122c3575b9587317cf1c60dc39ad4c44e0d99 (patch)
tree6517c3b7e1676b8cac3af3bdb4f977eb3566c7df
parente89ac046919c5a230946f4e0a66c08e508c677be (diff)
Issue #16: Prüfung vor Rückverlinkung FollowUp zu Einzelempfehlung hinzugefügt
Dies verhindert einen möglichen Fehler für den Fall, dass die Onkostar-API beim Abrufen der ProzedurID des referenzierten Formulars `null` zurückgibt. closes #16
-rw-r--r--src/main/java/DNPM/analyzer/FollowUpAnalyzer.java4
-rw-r--r--src/test/java/DNPM/analyzer/FollowUpAnalyzerTest.java81
2 files changed, 85 insertions, 0 deletions
diff --git a/src/main/java/DNPM/analyzer/FollowUpAnalyzer.java b/src/main/java/DNPM/analyzer/FollowUpAnalyzer.java
index 109447a..e0e62d5 100644
--- a/src/main/java/DNPM/analyzer/FollowUpAnalyzer.java
+++ b/src/main/java/DNPM/analyzer/FollowUpAnalyzer.java
@@ -93,6 +93,10 @@ public class FollowUpAnalyzer implements IProcedureAnalyzer {
* @param procedure Das FollowUp
*/
private void backlinkToEinzelempfehlung(Procedure procedure) {
+ if (null == procedure.getValue("LinkTherapieempfehlung")) {
+ return;
+ }
+
var referencedProcedureId = procedure.getValue("LinkTherapieempfehlung").getInt();
if (referencedProcedureId == 0) {
// Alles gut, es ist keine Einzelempfehlung angegeben
diff --git a/src/test/java/DNPM/analyzer/FollowUpAnalyzerTest.java b/src/test/java/DNPM/analyzer/FollowUpAnalyzerTest.java
new file mode 100644
index 0000000..873e3c7
--- /dev/null
+++ b/src/test/java/DNPM/analyzer/FollowUpAnalyzerTest.java
@@ -0,0 +1,81 @@
+package DNPM.analyzer;
+
+import de.itc.onkostar.api.IOnkostarApi;
+import de.itc.onkostar.api.Item;
+import de.itc.onkostar.api.Procedure;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.*;
+
+@ExtendWith(MockitoExtension.class)
+public class FollowUpAnalyzerTest {
+
+ private IOnkostarApi onkostarApi;
+
+ private FollowUpAnalyzer followUpAnalyzer;
+
+ @BeforeEach
+ void setUp(
+ @Mock IOnkostarApi onkostarApi
+ ) {
+ this.onkostarApi = onkostarApi;
+ this.followUpAnalyzer = new FollowUpAnalyzer(onkostarApi);
+ }
+
+ @Test
+ void shouldBacklinkEinzelempfehlungUsingOnkostarApi() throws Exception {
+ var einzelempfehlung = new Procedure(onkostarApi);
+ einzelempfehlung.setId(1234);
+
+ when(onkostarApi.getProcedure(anyInt())).thenReturn(einzelempfehlung);
+
+ var procedure = new Procedure(onkostarApi);
+ procedure.setId(1000);
+ procedure.setValue("LinkTherapieempfehlung", new Item("LinkTherapieempfehlung", 1234));
+
+ followUpAnalyzer.analyze(procedure, null);
+
+ var procedureIdCaptor = ArgumentCaptor.forClass(Integer.class);
+ verify(onkostarApi, times(1)).getProcedure(procedureIdCaptor.capture());
+ assertThat(procedureIdCaptor.getValue()).isEqualTo(einzelempfehlung.getId());
+
+ var procedureCaptor = ArgumentCaptor.forClass(Procedure.class);
+ verify(onkostarApi, times(1)).saveProcedure(procedureCaptor.capture());
+ assertThat(procedureCaptor.getValue()).isNotNull();
+ assertThat(procedureCaptor.getValue().getId()).isEqualTo(einzelempfehlung.getId());
+ }
+
+ @Test
+ void shouldNotBacklinkEinzelempfehlungIfNoEinzelempfehlungSelected() throws Exception {
+ var procedure = new Procedure(onkostarApi);
+ procedure.setId(1000);
+
+ followUpAnalyzer.analyze(procedure, null);
+
+ verify(onkostarApi, times(0)).getProcedure(anyInt());
+ verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class));
+ }
+
+ @Test
+ void shouldNotBacklinkEinzelempfehlungIfEinzelempfehlungDoesNotExist() throws Exception {
+ var procedure = new Procedure(onkostarApi);
+ procedure.setId(1000);
+ procedure.setValue("LinkTherapieempfehlung", new Item("LinkTherapieempfehlung", 1234));
+
+ followUpAnalyzer.analyze(procedure, null);
+
+ var procedureIdCaptor = ArgumentCaptor.forClass(Integer.class);
+ verify(onkostarApi, times(1)).getProcedure(procedureIdCaptor.capture());
+ assertThat(procedureIdCaptor.getValue()).isEqualTo(1234);
+
+ verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class));
+ }
+
+}