From b1f281fa59fb595dad5f5928b997598559c0b8c1 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Tue, 27 Jun 2023 11:31:08 +0200 Subject: [PATCH] Issue #4: Verschiebe Backend-Methode in EinzelempfehlungAnalyzer --- .../analyzer/EinzelempfehlungAnalyzer.java | 34 ++++++++++++++++++ .../DNPM/analyzer/TherapieplanAnalyzer.java | 36 ------------------- .../EinzelempfehlungAnalyzerTest.java | 36 ++++++++++++++++++- .../analyzer/TherapieplanAnalyzerTest.java | 34 ++---------------- 4 files changed, 71 insertions(+), 69 deletions(-) diff --git a/src/main/java/DNPM/analyzer/EinzelempfehlungAnalyzer.java b/src/main/java/DNPM/analyzer/EinzelempfehlungAnalyzer.java index 6f38bdb..dfe9d22 100644 --- a/src/main/java/DNPM/analyzer/EinzelempfehlungAnalyzer.java +++ b/src/main/java/DNPM/analyzer/EinzelempfehlungAnalyzer.java @@ -1,8 +1,10 @@ package DNPM.analyzer; +import DNPM.dto.Studie; import DNPM.dto.Variant; import DNPM.security.PermissionType; import DNPM.security.PersonPoolBasedPermissionEvaluator; +import DNPM.services.StudienService; import DNPM.services.molekulargenetik.MolekulargenetikFormService; import de.itc.onkostar.api.Disease; import de.itc.onkostar.api.IOnkostarApi; @@ -32,14 +34,18 @@ public class EinzelempfehlungAnalyzer implements IProcedureAnalyzer { private final MolekulargenetikFormService molekulargenetikFormService; + private final StudienService studienService; + private final PersonPoolBasedPermissionEvaluator permissionEvaluator; public EinzelempfehlungAnalyzer( final IOnkostarApi onkostarApi, + final StudienService studienService, final MolekulargenetikFormService molekulargenetikFormService, final PersonPoolBasedPermissionEvaluator permissionEvaluator ) { this.onkostarApi = onkostarApi; + this.studienService = studienService; this.molekulargenetikFormService = molekulargenetikFormService; this.permissionEvaluator = permissionEvaluator; } @@ -112,4 +118,32 @@ public class EinzelempfehlungAnalyzer implements IProcedureAnalyzer { } } + /** + * Übergibt alle Studien, deren (Kurz-)Beschreibung oder NCT-Nummer den übergebenen Eingabewert q enthält + * + *

Wurde der Eingabewert nicht angegeben oder ist leer, werden alle Studien übergeben. + * + *

Beispiel zur Nutzung in einem Formularscript + *

+     * executePluginMethod(
+     *   'TherapieplanAnalyzer',
+     *   'getStudien',
+     *   { q: 'NCT-12' },
+     *   (response) => console.log(response),
+     *   false
+     * );
+     * 
+ * + * @param input Map mit Eingabewerten + * @return Liste mit Studien + */ + public List getStudien(Map input) { + var query = AnalyzerUtils.getRequiredValue(input, "q", String.class); + + if (query.isEmpty() || query.get().isBlank()) { + return studienService.findAll(); + } + return studienService.findByQuery(query.get()); + } + } diff --git a/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java b/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java index aef635b..6561da4 100644 --- a/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java +++ b/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java @@ -1,9 +1,7 @@ package DNPM.analyzer; -import DNPM.dto.Studie; import DNPM.security.DelegatingDataBasedPermissionEvaluator; import DNPM.security.PermissionType; -import DNPM.services.StudienService; import DNPM.services.mtb.MtbService; import DNPM.services.therapieplan.TherapieplanServiceFactory; import de.itc.onkostar.api.Disease; @@ -15,7 +13,6 @@ import de.itc.onkostar.api.analysis.OnkostarPluginType; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; -import java.util.List; import java.util.Map; import java.util.Set; @@ -27,8 +24,6 @@ import java.util.Set; @Component public class TherapieplanAnalyzer implements IProcedureAnalyzer { - private final StudienService studienService; - private final TherapieplanServiceFactory therapieplanServiceFactory; private final MtbService mtbService; @@ -36,12 +31,10 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer { private final DelegatingDataBasedPermissionEvaluator permissionEvaluator; public TherapieplanAnalyzer( - final StudienService studienService, final TherapieplanServiceFactory therapieplanServiceFactory, final MtbService mtbService, final DelegatingDataBasedPermissionEvaluator permissionEvaluator ) { - this.studienService = studienService; this.therapieplanServiceFactory = therapieplanServiceFactory; this.mtbService = mtbService; this.permissionEvaluator = permissionEvaluator; @@ -104,35 +97,6 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer { therapieplanServiceFactory.currentUsableInstance().updateRequiredMtbEntries(procedure); } - - /** - * Übergibt alle Studien, deren (Kurz-)Beschreibung oder NCT-Nummer den übergebenen Eingabewert q enthält - * - *

Wurde der Eingabewert nicht angegeben oder ist leer, werden alle Studien übergeben. - * - *

Beispiel zur Nutzung in einem Formularscript - *

-     * executePluginMethod(
-     *   'TherapieplanAnalyzer',
-     *   'getStudien',
-     *   { q: 'NCT-12' },
-     *   (response) => console.log(response),
-     *   false
-     * );
-     * 
- * - * @param input Map mit Eingabewerten - * @return Liste mit Studien - */ - public List getStudien(Map input) { - var query = AnalyzerUtils.getRequiredValue(input, "q", String.class); - - if (query.isEmpty() || query.get().isBlank()) { - return studienService.findAll(); - } - return studienService.findByQuery(query.get()); - } - /** * Übergibt den Text der referenzierten MTBs für den Protokollauszug * diff --git a/src/test/java/DNPM/analyzer/EinzelempfehlungAnalyzerTest.java b/src/test/java/DNPM/analyzer/EinzelempfehlungAnalyzerTest.java index f72159d..8812442 100644 --- a/src/test/java/DNPM/analyzer/EinzelempfehlungAnalyzerTest.java +++ b/src/test/java/DNPM/analyzer/EinzelempfehlungAnalyzerTest.java @@ -2,17 +2,21 @@ package DNPM.analyzer; import DNPM.security.PermissionType; import DNPM.security.PersonPoolBasedPermissionEvaluator; +import DNPM.services.StudienService; import DNPM.services.molekulargenetik.MolekulargenetikFormService; import de.itc.onkostar.api.IOnkostarApi; 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 java.util.HashMap; import java.util.Map; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; @@ -21,6 +25,8 @@ class EinzelempfehlungAnalyzerTest { private IOnkostarApi onkostarApi; + private StudienService studienService; + private MolekulargenetikFormService molekulargenetikFormService; private PersonPoolBasedPermissionEvaluator permissionEvaluator; @@ -30,13 +36,15 @@ class EinzelempfehlungAnalyzerTest { @BeforeEach void setup( @Mock IOnkostarApi onkostarApi, + @Mock StudienService studienService, @Mock MolekulargenetikFormService molekulargenetikFormService, @Mock PersonPoolBasedPermissionEvaluator permissionEvaluator ) { this.onkostarApi = onkostarApi; + this.studienService = studienService; this.molekulargenetikFormService = molekulargenetikFormService; this.permissionEvaluator = permissionEvaluator; - this.analyzer = new EinzelempfehlungAnalyzer(onkostarApi, molekulargenetikFormService, permissionEvaluator); + this.analyzer = new EinzelempfehlungAnalyzer(onkostarApi, studienService, molekulargenetikFormService, permissionEvaluator); } @Test @@ -49,4 +57,30 @@ class EinzelempfehlungAnalyzerTest { verify(molekulargenetikFormService, times(1)).getVariants(any(Procedure.class)); } + @Test + void shouldRequestAllStudienForEmptyQueryString() { + var input = Map.of("q", (Object) " "); + this.analyzer.getStudien(input); + + verify(studienService, times(1)).findAll(); + } + + @Test + void shouldRequestAllStudienForEmptyInputMap() { + var input = new HashMap(); + this.analyzer.getStudien(input); + + verify(studienService, times(1)).findAll(); + } + + @Test + void shouldRequestFilteredStudien() { + var input = Map.of("q", (Object) "NCT-123"); + this.analyzer.getStudien(input); + + var captor = ArgumentCaptor.forClass(String.class); + verify(studienService, times(1)).findByQuery(captor.capture()); + assertThat(captor.getValue()).isEqualTo("NCT-123"); + } + } diff --git a/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java b/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java index ffd886b..cd5aee1 100644 --- a/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java +++ b/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java @@ -2,7 +2,7 @@ package DNPM.analyzer; import DNPM.security.DelegatingDataBasedPermissionEvaluator; import DNPM.security.PermissionType; -import DNPM.services.*; +import DNPM.services.FormService; import DNPM.services.mtb.MtbService; import DNPM.services.therapieplan.MultipleMtbTherapieplanService; import DNPM.services.therapieplan.TherapieplanService; @@ -17,7 +17,6 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,9 +32,6 @@ class TherapieplanAnalyzerTest { @Mock private FormService formService; - @Mock - private StudienService studienService; - @Mock private TherapieplanServiceFactory therapieplanServiceFactory; @@ -52,7 +48,7 @@ class TherapieplanAnalyzerTest { @BeforeEach void setUp() { - this.therapieplanAnalyzer = new TherapieplanAnalyzer(studienService, therapieplanServiceFactory, mtbService, permissionEvaluator); + this.therapieplanAnalyzer = new TherapieplanAnalyzer(therapieplanServiceFactory, mtbService, permissionEvaluator); } @Test @@ -65,32 +61,6 @@ class TherapieplanAnalyzerTest { verify(this.therapieplanServiceFactory, times(1)).currentUsableInstance(); } - @Test - void shouldRequestAllStudienForEmptyQueryString() { - var input = Map.of("q", (Object) " "); - this.therapieplanAnalyzer.getStudien(input); - - verify(studienService, times(1)).findAll(); - } - - @Test - void shouldRequestAllStudienForEmptyInputMap() { - var input = new HashMap(); - this.therapieplanAnalyzer.getStudien(input); - - verify(studienService, times(1)).findAll(); - } - - @Test - void shouldRequestFilteredStudien() { - var input = Map.of("q", (Object) "NCT-123"); - this.therapieplanAnalyzer.getStudien(input); - - var captor = ArgumentCaptor.forClass(String.class); - verify(studienService, times(1)).findByQuery(captor.capture()); - assertThat(captor.getValue()).isEqualTo("NCT-123"); - } - @Test void shouldRequestProtokollauszug() { doAnswer(invocationOnMock -> {