From aad777b5e36238ef437210bd9ad3ea51c3274a45 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Mon, 20 Mar 2023 22:19:20 +0100 Subject: [PATCH] =?UTF-8?q?Issue=20#11:=20Backend-Service-Methode=20zum=20?= =?UTF-8?q?Abrufen=20des=20Protokollauszugs=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DNPM/analyzer/TherapieplanAnalyzer.java | 42 ++++++++++++++++++- .../analyzer/TherapieplanAnalyzerTest.java | 40 +++++++++++++++--- .../TherapieplanServiceFactoryTest.java | 1 - 3 files changed, 76 insertions(+), 7 deletions(-) diff --git a/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java b/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java index cf3b633..bdda750 100644 --- a/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java +++ b/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java @@ -3,6 +3,7 @@ package DNPM.analyzer; import DNPM.services.Studie; import DNPM.services.StudienService; import DNPM.services.TherapieplanServiceFactory; +import DNPM.services.mtb.MtbService; import de.itc.onkostar.api.Disease; import de.itc.onkostar.api.Procedure; import de.itc.onkostar.api.analysis.AnalyseTriggerEvent; @@ -27,12 +28,16 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer { private final TherapieplanServiceFactory therapieplanServiceFactory; + private final MtbService mtbService; + public TherapieplanAnalyzer( final StudienService studienService, - final TherapieplanServiceFactory therapieplanServiceFactory + final TherapieplanServiceFactory therapieplanServiceFactory, + final MtbService mtbService ) { this.studienService = studienService; this.therapieplanServiceFactory = therapieplanServiceFactory; + this.mtbService = mtbService; } @Override @@ -110,6 +115,7 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer { * * * @param input Map mit Eingabewerten + * @return Liste mit Studien */ public List getStudien(Map input) { var query = input.get("q"); @@ -120,4 +126,38 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer { return studienService.findByQuery(query.toString()); } + /** + * Übergibt den Text der referenzierten MTBs für den Protokollauszug + * + *

Wurde der Eingabewert id nicht übergeben, wird ein leerer String zurück gegeben. + * + *

Beispiel zur Nutzung in einem Formularscript + *

+     * executePluginMethod(
+     *   'TherapieplanAnalyzer',
+     *   'getProtokollauszug',
+     *   { id: 12345 },
+     *   (response) => console.log(response),
+     *   false
+     * );
+     * 
+ * + * @param input Map mit Eingabewerten + * @return Zeichenkette mit Protokollauszug + */ + public String getProtokollauszug(Map input) { + var id = input.get("id"); + + if (null == id || 0 == Integer.parseInt(id.toString())) { + return ""; + } + + var procedureId = Integer.parseInt(id.toString()); + return mtbService.getProtocol( + therapieplanServiceFactory + .currentUsableInstance() + .findReferencedMtbs(procedureId) + ); + } + } diff --git a/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java b/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java index 5c39212..fe3d824 100644 --- a/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java +++ b/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java @@ -1,9 +1,9 @@ package DNPM.analyzer; -import DNPM.services.MultipleMtbTherapieplanService; -import DNPM.services.StudienService; -import DNPM.services.TherapieplanServiceFactory; +import DNPM.services.*; +import DNPM.services.mtb.MtbService; 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; @@ -13,6 +13,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import java.util.HashMap; +import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; @@ -24,22 +25,32 @@ public class TherapieplanAnalyzerTest { @Mock private IOnkostarApi onkostarApi; + @Mock + private FormService formService; + @Mock private StudienService studienService; @Mock private TherapieplanServiceFactory therapieplanServiceFactory; + @Mock + private TherapieplanService therapieplanService; + + @Mock + private MtbService mtbService; + private TherapieplanAnalyzer therapieplanAnalyzer; @BeforeEach void setUp() { - this.therapieplanAnalyzer = new TherapieplanAnalyzer(studienService, therapieplanServiceFactory); + this.therapieplanAnalyzer = new TherapieplanAnalyzer(studienService, therapieplanServiceFactory, mtbService); } @Test void shouldRunServiceMethodsOnAnalyzeCalled() { - when(this.therapieplanServiceFactory.currentUsableInstance()).thenReturn(new MultipleMtbTherapieplanService()); + when(this.therapieplanServiceFactory.currentUsableInstance()) + .thenReturn(new MultipleMtbTherapieplanService(onkostarApi, formService)); this.therapieplanAnalyzer.analyze(new Procedure(onkostarApi), null); @@ -72,4 +83,23 @@ public class TherapieplanAnalyzerTest { assertThat(captor.getValue()).isEqualTo("NCT-123"); } + @Test + void shouldRequestProtokollauszug() { + doAnswer(invocationOnMock -> { + var procedure = new Procedure(onkostarApi); + procedure.setValue("referstemtb", new Item("referstemtb", 2345)); + return List.of(procedure); + }).when(this.therapieplanService).findReferencedMtbs(anyInt()); + + when(this.therapieplanServiceFactory.currentUsableInstance()) + .thenReturn(therapieplanService); + + var input = Map.of("id", (Object) 1234); + this.therapieplanAnalyzer.getProtokollauszug(input); + + var captor = ArgumentCaptor.forClass(List.class); + verify(mtbService, times(1)).getProtocol(captor.capture()); + assertThat(captor.getValue()).hasSize(1); + } + } diff --git a/src/test/java/DNPM/config/TherapieplanServiceFactoryTest.java b/src/test/java/DNPM/config/TherapieplanServiceFactoryTest.java index 2f0022d..ea9ff42 100644 --- a/src/test/java/DNPM/config/TherapieplanServiceFactoryTest.java +++ b/src/test/java/DNPM/config/TherapieplanServiceFactoryTest.java @@ -33,7 +33,6 @@ public class TherapieplanServiceFactoryTest { @Test void testShouldReturnDefaultTherapieplanServiceIfSettingIsFalse() { when(settingsService.multipleMtbsInMtbEpisode()).thenReturn(false); - var actual = this.therapieplanServiceFactory.currentUsableInstance(); var actual = this.therapieplanServiceFactory.currentUsableInstance();