package model.manager; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.celllife.idart.database.hibernate.Episode; import org.celllife.idart.database.hibernate.Patient; import org.celllife.idart.test.HibernateTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class PatientEpisodeTest extends HibernateTest { private SimpleDateFormat df = new SimpleDateFormat("dd-mm-yyyy"); private Date dateOne; private Date dateTwo; private Date dateThree; @BeforeClass public void setup() throws ParseException { dateOne = df.parse("01-01-2007"); dateTwo = df.parse("02-01-2007"); dateThree = df.parse("03-01-2007"); } @Test() public void testInsertPatientEpisodeAccordingToDate() { /* * Expecting patient that has two episodes, one with startDate = dateOne * and the other with startDate = dateThree. * * Will attempt to add an episode with a startDate = dateTwo and verify * that it is inserted in between the other two. */ Patient p = PatientManager.getPatient(getSession(), "0000"); Episode e2 = new Episode(); e2.setStartDate(dateTwo); e2.setStartReason("transfer in"); PatientManager.insertPatientEpisodeAccordingToDate(p, e2); List<Episode> episodes = p.getEpisodes(); assertTrue("Wrong number of episodes", episodes.size() == 3); assertTrue("Episode not inserted correctly", episodes.get(0) .getStartDate().compareTo(dateOne) == 0); assertTrue("Episode not inserted correctly", episodes.get(1) .getStartDate().compareTo(dateTwo) == 0); assertTrue("Episode not inserted correctly", episodes.get(2) .getStartDate().compareTo(dateThree) == 0); } @Test() public void testHasPreviousEpisodes() { /* * Expecting a patient that has one or more CLOSED episodes. */ Patient p2 = PatientManager.getPatient(getSession(), "0001"); assertTrue(PatientManager.hasPreviousEpisodes(p2)); } @Test() public void testHasNoPreviousEpisodes() { /* * Expecting patient that has no CLOSED episodes. */ Patient p2 = PatientManager.getPatient(getSession(), "0002"); assertFalse(PatientManager.hasPreviousEpisodes(p2)); } /** * * @param None * @return None */ @Test() public void testEpisodes() { Patient p2 = PatientManager.getPatient(getSession(), "0003"); Episode e = PatientManager.getMostRecentEpisode(p2); assertFalse("Episode is open", e.isOpen()); assertTrue("Episode stop date not as expected", e.getStopDate().compareTo(dateTwo) == 0); assertTrue("Episode stop reason not as expected",e.getStopReason().equals("Transfer out")); } /** * * @param None * @return None */ @Test() public void testMultipleEpisodes() { Patient p2 = PatientManager.getPatient(getSession(), "0004"); assertTrue(p2.getEpisodes().size() > 1); assertTrue(PatientManager.getMostRecentEpisode(p2).isOpen()); assertTrue(PatientManager.getMostRecentEpisode(p2).getStartDate() .compareTo(dateThree) == 0); assertTrue(PatientManager.getMostRecentEpisode(p2).getStartReason() .equalsIgnoreCase("transfer in")); } public void createData() throws Exception { setup(); startTransaction(); createDataInsertPatientEpisodeAccordingToDate(); createDataHasPreviousEpisodesData(); createDataHasNoPreviousEpisodes(); createDataEpisodes(); createDataMultipleEpisodes(); getSession().flush(); endTransactionAndCommit(); } private void createDataHasNoPreviousEpisodes() { Patient p = utils.createPatient("0002"); Episode e2 = new Episode(); e2.setStartDate(new Date()); e2.setClinic(p.getCurrentClinic()); e2.setStartReason("transfer in"); PatientManager.addEpisodeToPatient(p, e2); } private void createDataInsertPatientEpisodeAccordingToDate() { Patient p = utils.createPatient("0000"); Episode e1 = new Episode(); e1.setStartDate(dateOne); e1.setClinic(p.getCurrentClinic()); e1.setStartReason("transfer in"); PatientManager.addEpisodeToPatient(p, e1); Episode e3 = new Episode(); e3.setStartDate(dateThree); e3.setClinic(p.getCurrentClinic()); e3.setStartReason("transfer in"); PatientManager.addEpisodeToPatient(p, e3); } private void createDataHasPreviousEpisodesData() { Patient p = utils.createPatient("0001"); Date date = new Date(); Episode e1 = new Episode(); e1.setStartDate(date); e1.setStartReason("transfer in"); e1.setStartNotes("e1"); e1.setStopDate(date); e1.setStopReason("Transfer out"); e1.setClinic(p.getCurrentClinic()); date = new Date(); Episode e2 = new Episode(); e2.setStartDate(date); e2.setStartNotes("e2"); e2.setStartReason("transfer in"); e2.setStopDate(date); e2.setStopReason("Transfer out"); e2.setClinic(p.getCurrentClinic()); PatientManager.addEpisodeToPatient(p, e1); PatientManager.addEpisodeToPatient(p, e2); } private void createDataEpisodes() { Patient p = utils.createPatient("0003"); Episode episode = new Episode(); episode.setStartDate(dateOne); episode.setStartReason("transfer in"); episode.setStopDate(dateTwo); episode.setStopReason("Transfer out"); episode.setClinic(p.getCurrentClinic()); PatientManager.addEpisodeToPatient(p, episode); } private void createDataMultipleEpisodes() { Patient p = utils.createPatient("0004"); Episode episode = new Episode(); episode.setStartDate(dateOne); episode.setStartReason("transfer in"); episode.setStopDate(dateTwo); episode.setStopReason("Transfer out"); episode.setClinic(p.getCurrentClinic()); PatientManager.addEpisodeToPatient(p, episode); Episode e2 = new Episode(); e2.setStartDate(dateThree); e2.setStartReason("transfer in"); e2.setClinic(p.getCurrentClinic()); PatientManager.addEpisodeToPatient(p, e2); } }