From a80295c4c884d779bf4d2578e737579ead0ebe71 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Wed, 22 Mar 2023 12:04:10 +0100 Subject: Extraktion des Mappings Prozedur zu Prozedurwerten und Auswahl des Mappers Aktuell sind nur die beiden Formulare * OS.Systemische Therapie * OS.Systemische Therapie.VarianteUKW bekannt. Beide lassen sich über den extrahierten Mapper in eine Map mit Prozedurwerten mappen. --- src/test/java/DNPM/DNPMHelperTest.java | 73 ++++-------------- .../DefaultSystemtherapieServiceTest.java | 90 ++++++++++++++++++++++ .../ProzedurToProzedurwerteMapperTest.java | 77 ++++++++++++++++++ 3 files changed, 181 insertions(+), 59 deletions(-) create mode 100644 src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java create mode 100644 src/test/java/DNPM/services/systemtherapie/ProzedurToProzedurwerteMapperTest.java (limited to 'src/test') diff --git a/src/test/java/DNPM/DNPMHelperTest.java b/src/test/java/DNPM/DNPMHelperTest.java index f5f8c40..f9a03fb 100644 --- a/src/test/java/DNPM/DNPMHelperTest.java +++ b/src/test/java/DNPM/DNPMHelperTest.java @@ -1,89 +1,44 @@ package DNPM; +import DNPM.services.systemtherapie.SystemtherapieService; 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 java.sql.Date; -import java.time.Instant; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; 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.doAnswer; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) public class DNPMHelperTest { - private IOnkostarApi onkostarApi; + private SystemtherapieService systemtherapieService; private DNPMHelper dnpmHelper; @BeforeEach void setup( - @Mock IOnkostarApi onkostarApi + @Mock IOnkostarApi onkostarApi, + @Mock SystemtherapieService systemtherapieService ) { - this.onkostarApi = onkostarApi; - this.dnpmHelper = new DNPMHelper(onkostarApi); + this.systemtherapieService = systemtherapieService; + this.dnpmHelper = new DNPMHelper(onkostarApi, systemtherapieService); } @Test - void testShouldReturnSystemischeTherapienFromDiagnose() { - doAnswer(invocationOnMock -> { - var procedure = new Procedure(onkostarApi); - procedure.setFormName("OS.Systemische Therapie"); - procedure.setValue("Beginn", new Item("Beginn", Date.from(Instant.parse("2023-01-01T00:00:00Z")))); - procedure.setValue("Ende", new Item("Ende", Date.from(Instant.parse("2023-01-31T00:00:00Z")))); - procedure.setValue("Beendigung", new Item("Beendigungsstatus", "E")); - procedure.setValue("Ergebnis", new Item("Ergebnis", "T")); + void testShouldRequestSystemischeTherapienFromDiagnose() { + dnpmHelper.getSystemischeTherapienFromDiagnose(Map.of("DiagnoseId", 1234)); - var substanzen = new ArrayList<>(); - substanzen.add(Map.of( - "Substanz", "Testsubstanz", - "Substanz_shortDescription", "Testsubstanz" - )); - substanzen.add(Map.of( - "Substanz", "L01AA01", - "Substanz_shortDescription", "cyclophosphamide" - )); - - procedure.setValue("SubstanzenList", new Item("SubstanzenList", substanzen)); - - return List.of(procedure); - }).when(this.onkostarApi).getProceduresForDiseaseByForm(anyInt(), anyString()); - - var actual = dnpmHelper.getSystemischeTherapienFromDiagnose(Map.of("DiagnoseId", 1)); - - assertThat(actual).isNotNull(); - assertThat(actual).isExactlyInstanceOf(ArrayList.class); - assertThat(actual).hasSize(1); - - assertThat(actual.get(0).get("Beginn")) - .isEqualTo(Date.from(Instant.parse("2023-01-01T00:00:00Z")).toString()); - assertThat(actual.get(0).get("Ende")) - .isEqualTo(Date.from(Instant.parse("2023-01-31T00:00:00Z")).toString()); - assertThat(actual.get(0).get("Beendigung")) - .isEqualTo("E"); - assertThat(actual.get(0).get("Ergebnis")) - .isEqualTo("T"); - assertThat(actual.get(0).get("Wirkstoffe")) - .isEqualTo("Testsubstanz, cyclophosphamide"); - assertThat(actual.get(0).get("WirkstoffCodes")) - .isEqualTo( - "[" + - "{\"system\":\"other\",\"code\":\"Testsubstanz\",\"substance\":\"Testsubstanz\"}," + - "{\"system\":\"ATC\",\"code\":\"L01AA01\",\"substance\":\"cyclophosphamide\"}" + - "]" - ); + var captor = ArgumentCaptor.forClass(Integer.class); + verify(systemtherapieService, times(1)).getSystemischeTherapienFromDiagnose(captor.capture()); + assertThat(captor.getValue()).isEqualTo(1234); } @Test diff --git a/src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java b/src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java new file mode 100644 index 0000000..fdf8f8d --- /dev/null +++ b/src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java @@ -0,0 +1,90 @@ +package DNPM.services.systemtherapie; + +import DNPM.services.SettingsService; +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.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.*; + +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.doAnswer; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +public class DefaultSystemtherapieServiceTest { + + private IOnkostarApi onkostarApi; + + private SettingsService settingsService; + + private DefaultSystemtherapieService service; + + @BeforeEach + void setup( + @Mock IOnkostarApi onkostarApi, + @Mock SettingsService settingsService + ) { + this.onkostarApi = onkostarApi; + this.settingsService = settingsService; + this.service = new DefaultSystemtherapieService(onkostarApi, settingsService); + } + + private static Set>> expectedMapperMappings() { + return Map.ofEntries( + Map.entry("OS.Systemische Therapie", OsSystemischeTherapieToProzedurwerteMapper.class), + Map.entry("OS.Systemische Therapie.VarianteUKW", OsSystemischeTherapieToProzedurwerteMapper.class) + ).entrySet(); + } + + @ParameterizedTest + @MethodSource("expectedMapperMappings") + void testShouldMapFormNameToMapper(Map.Entry> expectedMapping) { + var procedure = new Procedure(onkostarApi); + procedure.setFormName(expectedMapping.getKey()); + + var actual = service.prozedurToProzedurwerteMapper(procedure); + + assertThat(actual).isExactlyInstanceOf(expectedMapping.getValue()); + } + + private static Set> expectedFormnameMappings() { + return Map.ofEntries( + Map.entry("2011", "OS.Systemische Therapie.VarianteUKW"), + Map.entry("20119", "OS.Systemische Therapie.VarianteUKW"), + Map.entry("Defaultwert", "OS.Systemische Therapie") + ).entrySet(); + } + + @ParameterizedTest + @MethodSource("expectedFormnameMappings") + void testShouldMapSidToFormName(Map.Entry expectedMapping) { + var actual = service.selectFormNameBySID(expectedMapping.getKey()); + assertThat(actual).isEqualTo(expectedMapping.getValue()); + } + + @Test + void testShouldReturnSystemischeTherapienFromDiagnose() { + when(settingsService.getSID()).thenReturn(Optional.of("12345")); + + doAnswer(invocationOnMock -> { + var procedure = new Procedure(onkostarApi); + procedure.setFormName("OS.Systemische Therapie"); + return List.of(procedure); + }).when(this.onkostarApi).getProceduresForDiseaseByForm(anyInt(), anyString()); + + var actual = service.getSystemischeTherapienFromDiagnose(1); + + assertThat(actual).isNotNull(); + assertThat(actual).isExactlyInstanceOf(ArrayList.class); + assertThat(actual).hasSize(1); + } +} diff --git a/src/test/java/DNPM/services/systemtherapie/ProzedurToProzedurwerteMapperTest.java b/src/test/java/DNPM/services/systemtherapie/ProzedurToProzedurwerteMapperTest.java new file mode 100644 index 0000000..8804a52 --- /dev/null +++ b/src/test/java/DNPM/services/systemtherapie/ProzedurToProzedurwerteMapperTest.java @@ -0,0 +1,77 @@ +package DNPM.services.systemtherapie; + +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.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.sql.Date; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; + +@ExtendWith(MockitoExtension.class) +public class ProzedurToProzedurwerteMapperTest { + + private IOnkostarApi onkostarApi; + + private OsSystemischeTherapieToProzedurwerteMapper mapper; + + @BeforeEach + void setup( + @Mock IOnkostarApi onkostarApi + ) { + this.onkostarApi = onkostarApi; + this.mapper = new OsSystemischeTherapieToProzedurwerteMapper(); + } + + @Test + void testShouldReturnSystemischeTherapienFromDiagnose() { + var procedure = new Procedure(onkostarApi); + procedure.setFormName("OS.Systemische Therapie"); + procedure.setValue("Beginn", new Item("Beginn", Date.from(Instant.parse("2023-01-01T00:00:00Z")))); + procedure.setValue("Ende", new Item("Ende", Date.from(Instant.parse("2023-01-31T00:00:00Z")))); + procedure.setValue("Beendigung", new Item("Beendigungsstatus", "E")); + procedure.setValue("Ergebnis", new Item("Ergebnis", "T")); + + var substanzen = new ArrayList<>(); + substanzen.add(Map.of( + "Substanz", "Testsubstanz", + "Substanz_shortDescription", "Testsubstanz" + )); + substanzen.add(Map.of( + "Substanz", "L01AA01", + "Substanz_shortDescription", "cyclophosphamide" + )); + procedure.setValue("SubstanzenList", new Item("SubstanzenList", substanzen)); + + var actual = mapper.apply(procedure); + + assertThat(actual).isPresent(); + + assertThat(actual.get().get("Beginn")) + .isEqualTo(Date.from(Instant.parse("2023-01-01T00:00:00Z")).toString()); + assertThat(actual.get().get("Ende")) + .isEqualTo(Date.from(Instant.parse("2023-01-31T00:00:00Z")).toString()); + assertThat(actual.get().get("Beendigung")) + .isEqualTo("E"); + assertThat(actual.get().get("Ergebnis")) + .isEqualTo("T"); + assertThat(actual.get().get("Wirkstoffe")) + .isEqualTo("Testsubstanz, cyclophosphamide"); + assertThat(actual.get().get("WirkstoffCodes")) + .isEqualTo( + "[" + + "{\"system\":\"other\",\"code\":\"Testsubstanz\",\"substance\":\"Testsubstanz\"}," + + "{\"system\":\"ATC\",\"code\":\"L01AA01\",\"substance\":\"cyclophosphamide\"}" + + "]" + ); + } + +} -- cgit v1.2.3