From f0f09d43a319f6facde3e774dd0f90a9b3c79815 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Tue, 10 Oct 2023 12:13:51 +0200 Subject: Issue #54: Service zum Ermitteln des ECOG-Status aus Strahlentherapie-Formularen hinzugefügt --- .../DefaultStrahlentherapieServiceTest.java | 106 +++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 src/test/java/DNPM/services/strahlentherapie/DefaultStrahlentherapieServiceTest.java (limited to 'src/test') diff --git a/src/test/java/DNPM/services/strahlentherapie/DefaultStrahlentherapieServiceTest.java b/src/test/java/DNPM/services/strahlentherapie/DefaultStrahlentherapieServiceTest.java new file mode 100644 index 0000000..652aa16 --- /dev/null +++ b/src/test/java/DNPM/services/strahlentherapie/DefaultStrahlentherapieServiceTest.java @@ -0,0 +1,106 @@ +package DNPM.services.strahlentherapie; + +import DNPM.services.SettingsService; +import de.itc.onkostar.api.*; +import org.assertj.core.util.Lists; +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.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class DefaultStrahlentherapieServiceTest { + + private IOnkostarApi onkostarApi; + + private SettingsService settingsService; + + private DefaultStrahlentherapieService service; + + @BeforeEach + void setup(@Mock IOnkostarApi onkostarApi, @Mock SettingsService settingsService) { + this.onkostarApi = onkostarApi; + this.settingsService = settingsService; + this.service = new DefaultStrahlentherapieService(onkostarApi, settingsService); + } + + @Test + void testShouldRequestProceduresWithDefaultFormName() { + when(this.settingsService.getSetting(anyString())).thenReturn(Optional.empty()); + + doAnswer(invocationOnMock -> { + var procedure = new Procedure(onkostarApi); + procedure.setId(1); + procedure.setFormName("OS.Strahlentherapie"); + procedure.setStartDate(Date.from(Instant.parse("2023-07-01T06:00:00Z"))); + procedure.setEditState(ProcedureEditStateType.COMPLETED); + procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1)); + return Lists.list(procedure); + }).when(this.onkostarApi).getProceduresForDiseaseByForm(anyInt(), anyString()); + + doAnswer(invocationOnMock -> { + var disease = new Disease(onkostarApi); + disease.setId(1); + disease.setPatientId(123); + return Lists.list(disease); + }).when(this.onkostarApi).getDiseasesByPatientId(anyInt()); + + var patient = new Patient(onkostarApi); + patient.setId(123); + + service.ecogStatus(patient); + + var argumentCaptor = ArgumentCaptor.forClass(String.class); + verify(onkostarApi, times(1)).getProceduresForDiseaseByForm(anyInt(), argumentCaptor.capture()); + assertThat(argumentCaptor.getValue()).isEqualTo("OS.Strahlentherapie"); + } + + @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.Strahlentherapie"); + 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.Strahlentherapie"); + 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.ecogStatus(patient); + + assertThat(actual) + .isNotNull() + .isExactlyInstanceOf(ArrayList.class) + .hasSize(2); + } +} -- cgit v1.2.3 From 14e9fcab1a400d04b21c2ea5cf3a3e02dd30f043 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Tue, 10 Oct 2023 12:21:27 +0200 Subject: Issue #54: Add common EcogService interface --- src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/test') diff --git a/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java b/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java index 1fa57c0..d500059 100644 --- a/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java +++ b/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java @@ -1,5 +1,6 @@ package DNPM.analyzer; +import DNPM.dto.EcogStatusWithDate; import DNPM.services.systemtherapie.SystemtherapieService; import de.itc.onkostar.api.*; import org.junit.jupiter.api.BeforeEach; @@ -54,7 +55,7 @@ class SystemtherapieAnalyzerTest { final var ecogDate = daysPassed(1); final var procedureDate = daysPassed(1); - doAnswer(invocationOnMock -> List.of(new SystemtherapieService.EcogStatusWithDate(ecogDate, "0"))) + doAnswer(invocationOnMock -> List.of(new EcogStatusWithDate(ecogDate, "0"))) .when(systemtherapieService).ecogStatus(any(Patient.class)); var patient = new Patient(onkostarApi); @@ -114,7 +115,7 @@ class SystemtherapieAnalyzerTest { final var ecogDate = daysPassed(28); final var procedureDate = daysPassed(1); - doAnswer(invocationOnMock -> List.of(new SystemtherapieService.EcogStatusWithDate(ecogDate, "0"))) + doAnswer(invocationOnMock -> List.of(new EcogStatusWithDate(ecogDate, "0"))) .when(systemtherapieService).ecogStatus(any(Patient.class)); var patient = new Patient(onkostarApi); -- cgit v1.2.3 From 9c503d2244f61221fdf9716ded30f86aa758f957 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Tue, 10 Oct 2023 13:02:21 +0200 Subject: Issue #54: Verwende ECOG nach Update von Strahlen- und Systemtherapieformular --- .../DNPM/analyzer/SystemtherapieAnalyzerTest.java | 138 ----------------- .../DNPM/analyzer/TherapieMitEcogAnalyzerTest.java | 165 +++++++++++++++++++++ 2 files changed, 165 insertions(+), 138 deletions(-) delete mode 100644 src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java create mode 100644 src/test/java/DNPM/analyzer/TherapieMitEcogAnalyzerTest.java (limited to 'src/test') diff --git a/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java b/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java deleted file mode 100644 index d500059..0000000 --- a/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java +++ /dev/null @@ -1,138 +0,0 @@ -package DNPM.analyzer; - -import DNPM.dto.EcogStatusWithDate; -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 EcogStatusWithDate(ecogDate, "0"))) - .when(systemtherapieService).ecogStatus(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).ecogStatus(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 EcogStatusWithDate(ecogDate, "0"))) - .when(systemtherapieService).ecogStatus(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/analyzer/TherapieMitEcogAnalyzerTest.java b/src/test/java/DNPM/analyzer/TherapieMitEcogAnalyzerTest.java new file mode 100644 index 0000000..aab0759 --- /dev/null +++ b/src/test/java/DNPM/analyzer/TherapieMitEcogAnalyzerTest.java @@ -0,0 +1,165 @@ +package DNPM.analyzer; + +import DNPM.dto.EcogStatusWithDate; +import DNPM.services.strahlentherapie.StrahlentherapieService; +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 TherapieMitEcogAnalyzerTest { + + private IOnkostarApi onkostarApi; + + private StrahlentherapieService strahlentherapieService; + + private SystemtherapieService systemtherapieService; + + private TherapieMitEcogAnalyzer therapieMitEcogAnalyzer; + + 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 StrahlentherapieService strahlentherapieService, + @Mock SystemtherapieService systemtherapieService + ) { + this.onkostarApi = onkostarApi; + this.strahlentherapieService = strahlentherapieService; + this.systemtherapieService = systemtherapieService; + this.therapieMitEcogAnalyzer = new TherapieMitEcogAnalyzer(onkostarApi, strahlentherapieService, 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 EcogStatusWithDate(ecogDate, "0"))) + .when(systemtherapieService).ecogStatus(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()); + + therapieMitEcogAnalyzer.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).ecogStatus(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)); + + therapieMitEcogAnalyzer.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 EcogStatusWithDate(ecogDate, "0"))) + .when(systemtherapieService).ecogStatus(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)); + + therapieMitEcogAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); + + verify(onkostarApi, times(0)).getProceduresForDiseaseByForm(anyInt(), anyString()); + verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class), anyBoolean()); + } + + @Test + void shouldRequestEcogFromStrahlentherapieAndSystemtherapie() { + final var diagnosisDate = daysPassed(7); + final var procedureDate = daysPassed(1); + + 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)); + + therapieMitEcogAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); + + verify(strahlentherapieService, times(1)).ecogStatus(any()); + verify(systemtherapieService, times(1)).ecogStatus(any()); + } + +} -- cgit v1.2.3