package model.manager;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import model.manager.exports.columns.EpisodeDetailsEnum;
import model.nonPersistent.ExportDrugInfo;
import model.nonPersistent.ExportPackageInfo;
import org.celllife.idart.database.hibernate.AccumulatedDrugs;
import org.celllife.idart.database.hibernate.Drug;
import org.celllife.idart.database.hibernate.Episode;
import org.celllife.idart.database.hibernate.Packages;
import org.celllife.idart.database.hibernate.Patient;
import org.celllife.idart.database.hibernate.PatientAttributeTest;
import org.celllife.idart.database.hibernate.Pregnancy;
import org.celllife.idart.misc.iDARTUtil;
import org.celllife.idart.test.HibernateTest;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class PatientSetManagerTest extends HibernateTest {
@DataProvider(name = "patientFields")
public Object[][] createFields() {
return new Object[][] {
{ "Patient", "firstNames",
makeMap("1009", "p4fn", "1010", "p5fn") },
{ "Patient", "lastname",
makeMap("1009", "p4ln", "1010", "p5ln") },
{ "Patient", "cellphone",
makeMap("1009", "123456", "1010", "456123") },
{ "Patient", "patientId",
makeMap("1009", "1009", "1010", "1010") },
{ "Patient", "clinic.clinicName",
makeMap("1009", "Main Clinic", "1010", "Main Clinic") }, };
}
/**
* Creates a Map<Integer, String> from a list of arguments as follows: 1,
* "string1", 2, "String 2" etc.
*
* @param args
* @return
*/
private Map<Object, Object> makeMap(Object... args) {
Map<Object, Object> map = new HashMap<Object, Object>();
for (int i = 0; i < args.length; i++) {
map.put(args[i], args[i + 1]);
i++;
}
return map;
}
@Test(dataProvider = "patientFields")
public void getPatientFieldsTest(String className, String fieldName,
Map<String, String> results) {
Map<Integer, Object> patientIdAttrMap = PatientSetManager.getPatientFields(getSession(), null,
className, fieldName, false);
for (String patid : results.keySet()) {
int id = PatientManager.getPatient(getSession(), patid).getId();
Assert.assertTrue(patientIdAttrMap.containsKey(id));
Assert.assertEquals(patientIdAttrMap.get(id), results.get(patid));
}
}
@Test
public void getEpisodeDetailsTest() {
List<String> details = new Vector<String>();
details.add(EpisodeDetailsEnum.startDate.template());
details.add(EpisodeDetailsEnum.startReason.template());
Map<Integer, List<List<Object>>> episodes = PatientSetManager
.getEpisodeDetails(getSession(), null, details, null, null);
int id = PatientManager.getPatient(getSession(), "setManagerTest").getId();
int id2 = PatientManager.getPatient(getSession(), "setManagerTest2").getId();
Assert.assertTrue(episodes.containsKey(id));
Assert.assertTrue(episodes.containsKey(id2));
List<Object> p1e1 = episodes.get(id).get(0);
Assert.assertEquals(p1e1.get(0).toString(), "2008-09-01 00:00:00.0");
Assert.assertEquals(p1e1.get(1).toString(), Episode.REASON_NEW_PATIENT);
List<Object> p2e0 = episodes.get(id2).get(0);
Assert.assertEquals(p2e0.get(0).toString(), "2007-09-01 00:00:00.0");
Assert.assertEquals(p2e0.get(1).toString(), "Re-referred In");
List<Object> p2e1 = episodes.get(id2).get(1);
Assert.assertEquals(p2e1.get(0).toString(), "2007-03-01 00:00:00.0");
Assert.assertEquals(p2e1.get(1).toString(), "Re-Transferred In");
List<Object> p2e2 = episodes.get(id2).get(2);
Assert.assertEquals(p2e2.get(0).toString(), "2007-02-01 00:00:00.0");
Assert.assertEquals(p2e2.get(1).toString(), "Transferred In");
}
@Test
public void testGetPregnancyDetails(){
List<Integer> pregnantAtDate = PatientSetManager.getPregnantAtDate(getSession(), null, iDARTUtil.parse(Date.class, "15 Jun 2007"));
Assert.assertEquals(pregnantAtDate.size(), 1);
int id = PatientManager.getPatient(getSession(), "setManagerTest").getId();
Assert.assertEquals(pregnantAtDate.get(0), Integer.valueOf(id));
}
@Test
public static void getExportPackageInfoTest() {
// Getting test patients
Map<Integer, Map<Integer, ExportPackageInfo>> mapExportPackgInfo = null;
mapExportPackgInfo = PatientSetManager.getPackageDetail(getSession(), null, 1, null, null);
// Fail test if mapExportPackgInf is null
Assert.assertNotNull(mapExportPackgInfo);
List list = getSession().createCriteria(Packages.class, "package").createAlias(
"package.prescription", "prescription").createAlias(
"prescription.patient", "patient").add(
Restrictions.isNotNull("package.prescription")).setProjection(
Projections.countDistinct("patient.id")).list();
int count = (Integer) list.get(0);
Assert.assertEquals(mapExportPackgInfo.size(), count);
// Testing inserted values for patient 0001
// First Episode ---
// First Drug --- [D4T] Stavudine 30mg, qty=60, timesPerDay=2,
// amntperTime=1, accumulated=0
// Second Drug --- [3TC] Lamivudine 150mg, qty=60, timesPerDay=2,
// amntperTime=1, accumulated=0
// Third Drug --- [EFV] Efavirenz 600mg, qty=30, timesPerDay=1,
// amntperTime=1, accumulated=0
// Date collected: 10-04-2007
// patient.id = 1002
//
// Getting patient with row id 1002, for patient 0001
int pid = PatientManager.getPatient(getSession(), "setManagerTest3").getId();
Map<Integer, ExportPackageInfo> epiLst = mapExportPackgInfo.get(pid);
int packid = PackageManager.getPackage(getSession(), "071001A-001-2").getId();
ExportPackageInfo epi = epiLst.get(packid);
Assert.assertEquals(epi.getDateCollected(),
iDARTUtil.parse(Date.class, "29 Oct 2007"));
Assert.assertEquals(epi.getPackageID(), "071001A-001-2");
Assert.assertEquals(epi.getPatientID().intValue(),pid);
for (ExportDrugInfo edi : epi.getListOfExportDrugInfo()) {
String compound = edi.getChemicalCompoundName();
if (compound.contains("[D4T]")) {
Assert.assertEquals(compound, DrugManager
.getShortGenericDrugName(DrugManager.getDrug(getSession(),
"[D4T] Stavudine 30mg"), true));
Assert.assertEquals(edi.getAmountPerTime(), 1.0);
Assert.assertEquals(edi.getAccumulatedDrugs(), 4);
Assert.assertEquals(edi.getQuantityDispensed(), 30);
Assert.assertEquals(edi.getTimesPerDay(), 2);
} else if (compound.contains("[3TC]")) {
Assert.assertEquals(compound, DrugManager
.getShortGenericDrugName(DrugManager.getDrug(getSession(),
"[3TC] Lamivudine 150mg"), true));
Assert.assertEquals(edi.getAmountPerTime(), 1.0);
Assert.assertEquals(edi.getAccumulatedDrugs(), 4);
Assert.assertEquals(edi.getQuantityDispensed(), 30);
Assert.assertEquals(edi.getTimesPerDay(), 2);
} else if (compound.contains("[EFV]")) {
Assert.assertEquals(compound, DrugManager
.getShortGenericDrugName(DrugManager.getDrug(getSession(),
"[EFV] Efavirenz 600mg"), true));
Assert.assertEquals(edi.getAmountPerTime(), 1.0);
Assert.assertEquals(edi.getAccumulatedDrugs(), 2);
Assert.assertEquals(edi.getQuantityDispensed(), 30);
Assert.assertEquals(edi.getTimesPerDay(), 1);
}
}
}
public void createTestData(){
startTransaction();
Patient p1 = utils.createPatient("setManagerTest");
p1.getPregnancies().add(new Pregnancy(p1,
iDARTUtil.parse(Date.class, "14 Jun 2007"),
iDARTUtil.parse(Date.class, "16 Jun 2007"), 'T'));
getSession().save(p1);
Episode episode = new Episode();
episode.setStartDate(iDARTUtil.parse(Date.class, "01 Sep 2008"));
episode.setStartReason(Episode.REASON_NEW_PATIENT);
episode.setClinic(p1.getCurrentClinic());
PatientManager.addEpisodeToPatient(p1, episode);
getSession().save(episode);
Patient p2 = utils.createPatient("setManagerTest2");
episode = new Episode();
episode.setStartDate(iDARTUtil.parse(Date.class, "01 Sep 2007"));
episode.setStartReason("Re-referred In");
episode.setClinic(p2.getCurrentClinic());
PatientManager.addEpisodeToPatient(p2, episode);
getSession().save(episode);
episode = new Episode();
episode.setStartDate(iDARTUtil.parse(Date.class, "01 Mar 2007"));
episode.setStartReason("Re-Transferred In");
episode.setClinic(p2.getCurrentClinic());
PatientManager.addEpisodeToPatient(p2, episode);
getSession().save(episode);
episode = new Episode();
episode.setStartDate(iDARTUtil.parse(Date.class, "01 Feb 2007"));
episode.setStartReason("Transferred In");
episode.setClinic(p2.getCurrentClinic());
PatientManager.addEpisodeToPatient(p2, episode);
getSession().save(episode);
Patient p3 = utils.createPatient("setManagerTest3");
List<Drug> drugs = new ArrayList<Drug>();
drugs.add(DrugManager.getDrug(getSession(), "[D4T] Stavudine 30mg"));
drugs.add(DrugManager.getDrug(getSession(), "[3TC] Lamivudine 150mg"));
drugs.add(DrugManager.getDrug(getSession(), "[EFV] Efavirenz 600mg"));
Packages package1 = utils.createPackage(p3, "071001A-001-2", 4, drugs, new int[]{4,4,2});
package1.setPickupDate(iDARTUtil.parse(Date.class, "29 Oct 2007"));
getSession().save(package1);
AccumulatedDrugs acd = (AccumulatedDrugs) package1.getAccumulatedDrugs().toArray()[0];
Packages previousPackage = acd.getPillCount().getPreviousPackage();
previousPackage.setPickupDate(iDARTUtil.parse(Date.class, "01 Oct 2007"));
getSession().save(previousPackage);
Patient p4 = utils.createPatient("1009");
p4.setFirstNames("p4fn");
p4.setLastname("p4ln");
p4.setCellphone("123456");
getSession().save(p4);
Patient p5 = utils.createPatient("1010");
p5.setFirstNames("p5fn");
p5.setLastname("p5ln");
p5.setCellphone("456123");
getSession().save(p5);
getSession().flush();
endTransactionAndCommit();
}
}