diff --git a/src/main/java/DNPM/DNPMHelper.java b/src/main/java/DNPM/DNPMHelper.java index 828546f..c4f6baa 100644 --- a/src/main/java/DNPM/DNPMHelper.java +++ b/src/main/java/DNPM/DNPMHelper.java @@ -223,25 +223,28 @@ public class DNPMHelper implements IProcedureAnalyzer { } public Object updateEmpfehlungPrio(final Map input) { - // Auslesen der Parameter aus 'input' - //int rid = (int) input.get("rid"); - Object rid = input.get("rid"); - Object strDate = input.get("bd"); - SQLQuery result = null; + // Auslesen und Prüfen der Parameter aus 'input' + var rid = input.get("rid"); + if (null == rid || Integer.parseInt(rid.toString()) == 0) { + logger.error("Kein Parameter 'rid' angegeben, gebe 'false' zurück"); + return false; + } + + var strDate = input.get("bd"); + if (null == strDate || !strDate.toString().matches("[\\d]{4}-[\\d]{2}-[\\d]{2}")) { + logger.error("Kein oder ungültiger Parameter 'bd' angegeben, gebe 'false' zurück"); + return false; + } //String strD = strDate.toString(); //String CompareDate = strD.substring(1, 11); - //DateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); - String sql; - try { - sql = "UPDATE prozedur SET beginndatum = '" + strDate + "' WHERE id = '" + rid + "' "; - result = onkostarApi.getSessionFactory().getCurrentSession().createSQLQuery(sql); + String sql = "UPDATE prozedur SET beginndatum = '" + strDate + "' WHERE id = '" + rid + "' "; + SQLQuery result = onkostarApi.getSessionFactory().getCurrentSession().createSQLQuery(sql); result.executeUpdate(); return true; - } catch (Exception e) { return "Achtung: Ein Fehler ist aufgetreten, Änderung konnte nicht gespeichert werden!"; //return null; diff --git a/src/test/java/DNPM/DNPMHelperTest.java b/src/test/java/DNPM/DNPMHelperTest.java index 41a80d6..4c0bb1b 100644 --- a/src/test/java/DNPM/DNPMHelperTest.java +++ b/src/test/java/DNPM/DNPMHelperTest.java @@ -2,6 +2,9 @@ package DNPM; import DNPM.services.systemtherapie.SystemtherapieService; import de.itc.onkostar.api.IOnkostarApi; +import org.hibernate.SQLQuery; +import org.hibernate.Session; +import org.hibernate.SessionFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -13,12 +16,13 @@ import java.util.HashMap; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class DNPMHelperTest { + private IOnkostarApi onkostarApi; + private SystemtherapieService systemtherapieService; private DNPMHelper dnpmHelper; @@ -28,6 +32,7 @@ class DNPMHelperTest { @Mock IOnkostarApi onkostarApi, @Mock SystemtherapieService systemtherapieService ) { + this.onkostarApi = onkostarApi; this.systemtherapieService = systemtherapieService; this.dnpmHelper = new DNPMHelper(onkostarApi, systemtherapieService); } @@ -55,4 +60,57 @@ class DNPMHelperTest { assertThat(actual).isNull(); } + @Test + void testShouldReturnFalseIfNoRidAndNoBdCallingUpdateEmpfehlungPrio() { + var actual = dnpmHelper.updateEmpfehlungPrio(new HashMap<>()); + + assertThat(actual).isEqualTo(false); + } + + @Test + void testShouldReturnFalseIfNoRidCallingUpdateEmpfehlungPrio() { + var actual = dnpmHelper.updateEmpfehlungPrio(Map.of("bd", "2023-01-01")); + + assertThat(actual).isEqualTo(false); + } + + @Test + void testShouldReturnFalseIfNoBdCallingUpdateEmpfehlungPrio() { + var actual = dnpmHelper.updateEmpfehlungPrio(Map.of("rid", 1234)); + + assertThat(actual).isEqualTo(false); + } + + @Test + void testShouldReturnTrueIfRidAndBdPresentCallingUpdateEmpfehlungPrio() { + var sessionFactory = mock(SessionFactory.class); + var session = mock(Session.class); + var query = mock(SQLQuery.class); + + when(onkostarApi.getSessionFactory()).thenReturn(sessionFactory); + when(sessionFactory.getCurrentSession()).thenReturn(session); + when(session.createSQLQuery(anyString())).thenReturn(query); + + var actual = dnpmHelper.updateEmpfehlungPrio(Map.of("rid", 1234, "bd", "2023-01-01")); + + assertThat(actual).isEqualTo(true); + } + + @Test + void testShouldCreateSqlQueryWithRidAndBdCallingUpdateEmpfehlungPrio() { + var sessionFactory = mock(SessionFactory.class); + var session = mock(Session.class); + var query = mock(SQLQuery.class); + + when(onkostarApi.getSessionFactory()).thenReturn(sessionFactory); + when(sessionFactory.getCurrentSession()).thenReturn(session); + when(session.createSQLQuery(anyString())).thenReturn(query); + + dnpmHelper.updateEmpfehlungPrio(Map.of("rid", 1234, "bd", "2023-01-01")); + + var argumentCaptor = ArgumentCaptor.forClass(String.class); + verify(session, times(1)).createSQLQuery(argumentCaptor.capture()); + assertThat(argumentCaptor.getValue()).isEqualTo("UPDATE prozedur SET beginndatum = '2023-01-01' WHERE id = '1234' "); + } + }