summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2023-08-28 14:43:21 +0200
committerGitHub2023-08-28 14:43:21 +0200
commitef21c287f04640021387914af6307d014ea4a2db (patch)
treeedb1be1dd7a4395a91774424cb4d940d17bfea8e /src/test
parente31592dae985d3ecbda30fe0e5ba5861b43866b3 (diff)
parent35f1aa0d757900e1a5d22d04ab85c9b22882a07b (diff)
Merge pull request #39 from CCC-MF/issue_29
Issue #29: ECOG Performance Status aus Therapie-Formularen übernehmen
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/DNPM/DNPMHelperTest.java48
-rw-r--r--src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java137
-rw-r--r--src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java40
3 files changed, 221 insertions, 4 deletions
diff --git a/src/test/java/DNPM/DNPMHelperTest.java b/src/test/java/DNPM/DNPMHelperTest.java
index a90f2fb..17e8901 100644
--- a/src/test/java/DNPM/DNPMHelperTest.java
+++ b/src/test/java/DNPM/DNPMHelperTest.java
@@ -1,8 +1,12 @@
package DNPM;
+import DNPM.security.IllegalSecuredObjectAccessException;
+import DNPM.security.PermissionType;
+import DNPM.security.PersonPoolBasedPermissionEvaluator;
import DNPM.services.systemtherapie.SystemtherapieService;
import de.itc.onkostar.api.IOnkostarApi;
import de.itc.onkostar.api.Item;
+import de.itc.onkostar.api.Patient;
import de.itc.onkostar.api.Procedure;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
@@ -21,6 +25,7 @@ import java.util.List;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
@@ -30,16 +35,20 @@ class DNPMHelperTest {
private SystemtherapieService systemtherapieService;
+ private PersonPoolBasedPermissionEvaluator personPoolBasedPermissionEvaluator;
+
private DNPMHelper dnpmHelper;
@BeforeEach
void setup(
@Mock IOnkostarApi onkostarApi,
- @Mock SystemtherapieService systemtherapieService
+ @Mock SystemtherapieService systemtherapieService,
+ @Mock PersonPoolBasedPermissionEvaluator personPoolBasedPermissionEvaluator
) {
this.onkostarApi = onkostarApi;
this.systemtherapieService = systemtherapieService;
- this.dnpmHelper = new DNPMHelper(onkostarApi, systemtherapieService);
+ this.personPoolBasedPermissionEvaluator = personPoolBasedPermissionEvaluator;
+ this.dnpmHelper = new DNPMHelper(onkostarApi, systemtherapieService, personPoolBasedPermissionEvaluator);
}
@Test
@@ -245,6 +254,41 @@ class DNPMHelperTest {
assertThat(argumentCaptor.getValue()).contains("WHERE patient_id = 2 AND geloescht = 0");
}
+ @Test
+ void testShouldReturnEcogStatusList() {
+ when(personPoolBasedPermissionEvaluator.hasPermission(any(), any(Patient.class), any(PermissionType.class)))
+ .thenReturn(true);
+
+ doAnswer(invocationOnMock -> {
+ var id = invocationOnMock.getArgument(0, Integer.class);
+ var patient = new Patient(onkostarApi);
+ patient.setId(id);
+ return patient;
+ }).when(onkostarApi).getPatient(anyInt());
+
+ dnpmHelper.getEcogStatus(Map.of("PatientId", 42));
+
+ var argumentCaptor = ArgumentCaptor.forClass(Patient.class);
+ verify(systemtherapieService, times(1)).ecogSatus(argumentCaptor.capture());
+ assertThat(argumentCaptor.getValue()).isNotNull();
+ assertThat(argumentCaptor.getValue().getId()).isEqualTo(42);
+ }
+
+ @Test
+ void testShouldNotReturnEcogStatusListIfNoPermissionGranted() {
+ when(personPoolBasedPermissionEvaluator.hasPermission(any(), any(Patient.class), any(PermissionType.class)))
+ .thenReturn(false);
+
+ doAnswer(invocationOnMock -> {
+ var id = invocationOnMock.getArgument(0, Integer.class);
+ var patient = new Patient(onkostarApi);
+ patient.setId(id);
+ return patient;
+ }).when(onkostarApi).getPatient(anyInt());
+
+ assertThrows(IllegalSecuredObjectAccessException.class, () -> dnpmHelper.getEcogStatus(Map.of("PatientId", 42)));
+ }
+
}
}
diff --git a/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java b/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java
new file mode 100644
index 0000000..4028aec
--- /dev/null
+++ b/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java
@@ -0,0 +1,137 @@
+package DNPM.analyzer;
+
+import DNPM.services.systemtherapie.SystemtherapieService;
+import de.itc.onkostar.api.*;
+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.time.Instant;
+import java.time.temporal.ChronoUnit;
+import java.util.Date;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.*;
+
+@ExtendWith(MockitoExtension.class)
+class SystemtherapieAnalyzerTest {
+
+ private IOnkostarApi onkostarApi;
+
+ private SystemtherapieService systemtherapieService;
+
+ private SystemtherapieAnalyzer systemtherapieAnalyzer;
+
+ private Disease dummyDisease(int id, Date diagnosisDate) {
+ var disease = new Disease(onkostarApi);
+ disease.setId(id);
+ disease.setDiagnosisDate(diagnosisDate);
+ return disease;
+ }
+
+ private Date daysPassed(int days) {
+ return Date.from(Instant.now().minus(days, ChronoUnit.DAYS));
+ }
+
+ @BeforeEach
+ void setUp(
+ @Mock IOnkostarApi onkostarApi,
+ @Mock SystemtherapieService systemtherapieService
+ ) {
+ this.onkostarApi = onkostarApi;
+ this.systemtherapieService = systemtherapieService;
+ this.systemtherapieAnalyzer = new SystemtherapieAnalyzer(onkostarApi, systemtherapieService);
+ }
+
+ @Test
+ void shouldInsertNewEcogStatus() throws Exception {
+ final var diagnosisDate = daysPassed(7);
+ final var ecogDate = daysPassed(1);
+ final var procedureDate = daysPassed(1);
+
+ doAnswer(invocationOnMock -> List.of(new SystemtherapieService.EcogStatusWithDate(ecogDate, "0")))
+ .when(systemtherapieService).ecogSatus(any(Patient.class));
+
+ var patient = new Patient(onkostarApi);
+ patient.setId(1);
+
+ var procedure = new Procedure(onkostarApi);
+ procedure.setId(1000);
+ procedure.setStartDate(procedureDate);
+ procedure.setEditState(ProcedureEditStateType.COMPLETED);
+ procedure.setPatientId(1);
+ procedure.setPatient(patient);
+ procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1));
+
+ doAnswer(invocationOnMock -> List.of(dummyDisease(42, diagnosisDate))).when(this.onkostarApi).getDiseasesByPatientId(anyInt());
+
+ doAnswer(invocationOnMock -> List.of(procedure)).when(onkostarApi).getProceduresForDiseaseByForm(anyInt(), anyString());
+
+ systemtherapieAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate));
+
+ var idCaptor = ArgumentCaptor.forClass(Integer.class);
+ var formNameCaptor = ArgumentCaptor.forClass(String.class);
+ verify(onkostarApi, times(1)).getProceduresForDiseaseByForm(idCaptor.capture(), formNameCaptor.capture());
+ assertThat(idCaptor.getValue()).isEqualTo(42);
+ assertThat(formNameCaptor.getValue()).isEqualTo("DNPM Klinik/Anamnese");
+
+ verify(onkostarApi, times(1)).saveProcedure(any(Procedure.class), anyBoolean());
+ }
+
+ @Test
+ void shouldNotModifyEcogStatusIfNoCompletedSystemTherapy() throws Exception {
+ final var diagnosisDate = daysPassed(7);
+ final var procedureDate = daysPassed(1);
+
+ doAnswer(invocationOnMock -> List.of())
+ .when(systemtherapieService).ecogSatus(any(Patient.class));
+
+ var patient = new Patient(onkostarApi);
+ patient.setId(1);
+
+ var procedure = new Procedure(onkostarApi);
+ procedure.setId(1000);
+ procedure.setStartDate(procedureDate);
+ procedure.setEditState(ProcedureEditStateType.COMPLETED);
+ procedure.setPatientId(1);
+ procedure.setPatient(patient);
+ procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1));
+
+ systemtherapieAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate));
+
+ verify(onkostarApi, times(0)).getProceduresForDiseaseByForm(anyInt(), anyString());
+ verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class), anyBoolean());
+ }
+
+ @Test
+ void shouldNotIncludeEcogStatusBeforeDiagnosisDate() throws Exception {
+ final var diagnosisDate = daysPassed(7);
+ final var ecogDate = daysPassed(28);
+ final var procedureDate = daysPassed(1);
+
+ doAnswer(invocationOnMock -> List.of(new SystemtherapieService.EcogStatusWithDate(ecogDate, "0")))
+ .when(systemtherapieService).ecogSatus(any(Patient.class));
+
+ var patient = new Patient(onkostarApi);
+ patient.setId(1);
+
+ var procedure = new Procedure(onkostarApi);
+ procedure.setId(1000);
+ procedure.setStartDate(procedureDate);
+ procedure.setEditState(ProcedureEditStateType.COMPLETED);
+ procedure.setPatientId(1);
+ procedure.setPatient(patient);
+ procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1));
+
+ systemtherapieAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate));
+
+ verify(onkostarApi, times(0)).getProceduresForDiseaseByForm(anyInt(), anyString());
+ verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class), anyBoolean());
+ }
+
+}
diff --git a/src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java b/src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java
index 40ce315..7852187 100644
--- a/src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java
+++ b/src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java
@@ -1,8 +1,7 @@
package DNPM.services.systemtherapie;
import DNPM.services.SettingsService;
-import de.itc.onkostar.api.IOnkostarApi;
-import de.itc.onkostar.api.Procedure;
+import de.itc.onkostar.api.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -12,6 +11,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
+import java.time.Instant;
import java.util.*;
import static org.assertj.core.api.Assertions.assertThat;
@@ -94,4 +94,40 @@ class DefaultSystemtherapieServiceTest {
.isExactlyInstanceOf(ArrayList.class)
.hasSize(1);
}
+
+ @Test
+ void testShouldReturnListOfEcogStatusWithDate() {
+ doAnswer(invocationOnMock -> {
+ var disease = new Disease(onkostarApi);
+ disease.setId(1);
+ return List.of(disease);
+ }).when(this.onkostarApi).getDiseasesByPatientId(anyInt());
+
+ doAnswer(invocationOnMock -> {
+ var procedure1 = new Procedure(onkostarApi);
+ procedure1.setId(1);
+ procedure1.setFormName("OS.Systemische Therapie");
+ procedure1.setStartDate(Date.from(Instant.parse("2023-07-01T06:00:00Z")));
+ procedure1.setEditState(ProcedureEditStateType.COMPLETED);
+ procedure1.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1));
+
+ var procedure2 = new Procedure(onkostarApi);
+ procedure2.setId(2);
+ procedure2.setFormName("OS.Systemische Therapie");
+ procedure2.setStartDate(Date.from(Instant.parse("2023-07-12T06:00:00Z")));
+ procedure2.setEditState(ProcedureEditStateType.COMPLETED);
+ procedure2.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 2));
+ return List.of(procedure1, procedure2);
+ }).when(this.onkostarApi).getProceduresForDiseaseByForm(anyInt(), anyString());
+
+ var patient = new Patient(onkostarApi);
+ patient.setId(1);
+
+ var actual = service.ecogSatus(patient);
+
+ assertThat(actual)
+ .isNotNull()
+ .isExactlyInstanceOf(ArrayList.class)
+ .hasSize(2);
+ }
}