package at.medevit.elexis.ehc.vacdoc.service;
import static ch.elexis.core.constants.XidConstants.DOMAIN_AHV;
import static ch.elexis.core.constants.XidConstants.EAN;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.ehealth_connector.cda.ch.vacd.CdaChVacd;
import org.junit.BeforeClass;
import org.junit.Test;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
import at.medevit.elexis.ehc.vacdoc.test.AllTests;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.data.Anschrift;
import ch.elexis.data.Mandant;
import ch.elexis.data.Patient;
import ch.elexis.data.Query;
public class MeineImpfungenServiceTest {
BundleContext context =
FrameworkUtil.getBundle(MeineImpfungenServiceTest.class).getBundleContext();
private static Patient patient;
@BeforeClass
public static void beforeClass(){
Query<Patient> query = new Query<Patient>(Patient.class);
List<Patient> patients = query.execute();
if (!patients.isEmpty()) {
patient = patients.get(0);
} else {
patient = new Patient("Wurst", "Hans", "01.04.1970", Patient.MALE);
Anschrift anschrift = new Anschrift();
anschrift.setOrt("Küsnacht ZH");
anschrift.setPlz("8700");
anschrift.setStrasse("Testweg 1");
patient.setAnschrift(anschrift);
}
String ahvNumber = getAHVNumber(patient);
if (ahvNumber == null || ahvNumber.isEmpty()) {
addAHVNumber(patient, 1);
}
CoreHub.mandantCfg.set(MeineImpfungenService.CONFIG_TRUSTSTORE_PATH,
System.getProperty(MeineImpfungenService.CONFIG_TRUSTSTORE_PATH));
CoreHub.mandantCfg.set(MeineImpfungenService.CONFIG_TRUSTSTORE_PASS,
System.getProperty(MeineImpfungenService.CONFIG_TRUSTSTORE_PASS));
CoreHub.mandantCfg.set(MeineImpfungenService.CONFIG_KEYSTORE_PATH,
System.getProperty(MeineImpfungenService.CONFIG_KEYSTORE_PATH));
CoreHub.mandantCfg.set(MeineImpfungenService.CONFIG_KEYSTORE_PASS,
System.getProperty(MeineImpfungenService.CONFIG_KEYSTORE_PASS));
Mandant mandator = ElexisEventDispatcher.getSelectedMandator();
mandator.addXid(EAN, "2000002000001", true);
}
private static String getAHVNumber(Patient pat){
return pat.getXid(DOMAIN_AHV);
}
private static void addAHVNumber(Patient pat, int index){
String country = "756";
String number = String.format("%09d", index);
StringBuilder ahvBuilder = new StringBuilder(country + number);
ahvBuilder.append(getCheckNumber(ahvBuilder.toString()));
pat.addXid(DOMAIN_AHV, ahvBuilder.toString(), true);
}
private static String getCheckNumber(String string){
int sum = 0;
for (int i = 0; i < string.length(); i++) {
// reveresd order
char character = string.charAt((string.length() - 1) - i);
int intValue = Character.getNumericValue(character);
if (i % 2 == 0) {
sum += intValue * 3;
} else {
sum += intValue;
}
}
return Integer.toString(sum % 10);
}
@SuppressWarnings("unchecked")
@Test
public void isValid(){
ServiceReference<MeineImpfungenService> serviceRef =
(ServiceReference<MeineImpfungenService>) AllTests
.getService(MeineImpfungenService.class);
MeineImpfungenService service = context.getService(serviceRef);
assertTrue(service.isVaild());
AllTests.ungetService(serviceRef);
}
@SuppressWarnings("unchecked")
@Test
public void getPatients(){
ServiceReference<MeineImpfungenService> serviceRef =
(ServiceReference<MeineImpfungenService>) AllTests
.getService(MeineImpfungenService.class);
MeineImpfungenService service = context.getService(serviceRef);
List<org.ehealth_connector.common.Patient> patients = service.getPatients(patient);
assertNotNull(patients);
AllTests.ungetService(serviceRef);
}
@SuppressWarnings("unchecked")
@Test
public void getDocuments() throws Exception{
ServiceReference<MeineImpfungenService> serviceRef =
(ServiceReference<MeineImpfungenService>) AllTests
.getService(MeineImpfungenService.class);
MeineImpfungenService service = context.getService(serviceRef);
List<org.ehealth_connector.common.Patient> patients = service.getPatients(patient);
List<CdaChVacd> documents = service.getDocuments(patients.get(0));
assertNotNull(documents);
assertFalse(documents.isEmpty());
assertNotNull(documents.get(0).getPatient());
assertNotNull(documents.get(0).getImmunizations());
AllTests.ungetService(serviceRef);
}
}