diff --git a/src/main/java/DNPM/ConsentManager.java b/src/main/java/DNPM/ConsentManager.java index fcdde7a..4d630b7 100644 --- a/src/main/java/DNPM/ConsentManager.java +++ b/src/main/java/DNPM/ConsentManager.java @@ -14,7 +14,6 @@ import org.hibernate.transform.Transformers; import org.hibernate.type.StandardBasicTypes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import java.util.List; import java.util.Map; @@ -23,8 +22,11 @@ public class ConsentManager implements IProcedureAnalyzer { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired - private IOnkostarApi onkostarApi; + private final IOnkostarApi onkostarApi; + + public ConsentManager(final IOnkostarApi onkostarApi) { + this.onkostarApi = onkostarApi; + } @Override public String getDescription() { @@ -52,8 +54,8 @@ public class ConsentManager implements IProcedureAnalyzer { } @Override - public boolean isRelevantForAnalyzer(Procedure Prozedur, Disease Erkrankung) { - return Prozedur.getFormName().equals(onkostarApi.getGlobalSetting("consentform")); + public boolean isRelevantForAnalyzer(Procedure prozedur, Disease erkrankung) { + return prozedur.getFormName().equals(onkostarApi.getGlobalSetting("consentform")); } @Override @@ -78,7 +80,7 @@ public class ConsentManager implements IProcedureAnalyzer { SQLQuery query1 = session.createSQLQuery(sql1) .addScalar("id", StandardBasicTypes.INTEGER) .addScalar("datum", StandardBasicTypes.TIMESTAMP); - System.out.println(query1.uniqueResult().toString()); + logger.info("Wert-Check: {}", query1.uniqueResult()); String sql = "SELECT prozedur.id AS procedure_id, prozedur.data_form_id, data_catalogue.name AS data_catalogue, data_catalogue_entry.name AS data_catalogue_entry, data_form.description AS formname, prozedur.beginndatum AS datum " + "FROM prozedur " + @@ -104,38 +106,15 @@ public class ConsentManager implements IProcedureAnalyzer { @SuppressWarnings("unchecked") List result = query.list(); - for (VerweisVon var : result) { - sql = var.getSQL(); + for (VerweisVon verweisVon : result) { + sql = verweisVon.getSQL(); query = session.createSQLQuery(sql) .addScalar("value", StandardBasicTypes.INTEGER); if (query.uniqueResult() != null) { value = (Integer) query.uniqueResult(); } if (value == prozedur.getId()) { - Procedure andereprozedur = onkostarApi.getProcedure(var.getProcedure_id()); - try { - Map felder = prozedur.getAllValues(); - for (Map.Entry feld : felder.entrySet()) { - if (feld.getKey().startsWith("Consent")) { - if (feld.getKey().equals("ConsentStatusEinwilligungDNPM")) { - switch (feld.getValue().getValue().toString()) { - case "z": - andereprozedur.setValue(feld.getKey(), new Item(feld.getKey(), "active")); - break; - case "a": - case "w": - andereprozedur.setValue(feld.getKey(), new Item(feld.getKey(), "rejected")); - break; - } - } else { - andereprozedur.setValue(feld.getKey(), prozedur.getValue(feld.getKey())); - } - } - } - onkostarApi.saveProcedure(andereprozedur); - } catch (Exception e) { - logger.error("Kann Prozedur nicht speichern", e); - } + saveReferencedProcedure(prozedur, verweisVon); value = 0; } } @@ -144,4 +123,33 @@ public class ConsentManager implements IProcedureAnalyzer { } } + private void saveReferencedProcedure(Procedure prozedur, VerweisVon verweisVon) { + Procedure andereprozedur = onkostarApi.getProcedure(verweisVon.getProcedure_id()); + try { + Map felder = prozedur.getAllValues(); + for (Map.Entry feld : felder.entrySet()) { + if (feld.getKey().startsWith("Consent")) { + if (feld.getKey().equals("ConsentStatusEinwilligungDNPM")) { + switch (feld.getValue().getValue().toString()) { + case "z": + andereprozedur.setValue(feld.getKey(), new Item(feld.getKey(), "active")); + break; + case "a": + case "w": + andereprozedur.setValue(feld.getKey(), new Item(feld.getKey(), "rejected")); + break; + default: + break; + } + } else { + andereprozedur.setValue(feld.getKey(), prozedur.getValue(feld.getKey())); + } + } + } + onkostarApi.saveProcedure(andereprozedur); + } catch (Exception e) { + logger.error("Kann Prozedur nicht speichern", e); + } + } + } diff --git a/src/main/resources/de/itc/onkostar/library/moduleContext.xml b/src/main/resources/de/itc/onkostar/library/moduleContext.xml index 3f34b04..880025d 100644 --- a/src/main/resources/de/itc/onkostar/library/moduleContext.xml +++ b/src/main/resources/de/itc/onkostar/library/moduleContext.xml @@ -17,7 +17,9 @@ - + + + diff --git a/src/test/java/DNPM/ConsentManagerTest.java b/src/test/java/DNPM/ConsentManagerTest.java new file mode 100644 index 0000000..6755ed6 --- /dev/null +++ b/src/test/java/DNPM/ConsentManagerTest.java @@ -0,0 +1,60 @@ +package DNPM; + +import de.itc.onkostar.api.IOnkostarApi; +import de.itc.onkostar.api.Procedure; +import org.hibernate.SQLQuery; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.type.Type; +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 static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class ConsentManagerTest { + + private IOnkostarApi onkostarApi; + + private ConsentManager consentManager; + + @BeforeEach + void setup( + @Mock IOnkostarApi onkostarApi + ) { + this.onkostarApi = onkostarApi; + this.consentManager = new ConsentManager(onkostarApi); + } + + @Test + void testShouldCreateSqlQueriesWithRelatedEntityIds() { + 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); + when(query.addScalar(anyString(), any(Type.class))).thenReturn(query); + when(query.uniqueResult()).thenReturn(""); + + var dummyProzedur = new Procedure(this.onkostarApi); + dummyProzedur.setId(111); + dummyProzedur.setPatientId(123); + + consentManager.analyze(dummyProzedur, null); + + var argumentCaptor = ArgumentCaptor.forClass(String.class); + verify(session, times(2)).createSQLQuery(argumentCaptor.capture()); + assertThat(argumentCaptor.getAllValues()).hasSize(2); + assertThat(argumentCaptor.getAllValues().get(0)).contains("where entity_id = '111'"); + assertThat(argumentCaptor.getAllValues().get(1)).contains("WHERE patient_id = 123 AND geloescht = 0"); + } + +}