From 36e122c3575b9587317cf1c60dc39ad4c44e0d99 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Thu, 23 Mar 2023 13:29:09 +0100 Subject: [PATCH] =?UTF-8?q?Issue=20#16:=20Pr=C3=BCfung=20vor=20R=C3=BCckve?= =?UTF-8?q?rlinkung=20FollowUp=20zu=20Einzelempfehlung=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../java/DNPM/analyzer/FollowUpAnalyzer.java | 4 + .../DNPM/analyzer/FollowUpAnalyzerTest.java | 81 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 src/test/java/DNPM/analyzer/FollowUpAnalyzerTest.java 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)); + } + +}