package test.integration; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import test.InputGenerator; import edu.cs320.project.*; import junit.framework.Assert; import junit.framework.TestCase; /** * 91% coverage. Display function was all that did not get covered. * * @author ewortzma * */ public class Search2IntegrationTest extends TestCase { List<PatientInfo> singleResult; List<PatientInfo> multipleResult; List<PatientInfo> emptyResult; /** * @param name */ public Search2IntegrationTest(String name) { super(name); } /* * (non-Javadoc) * * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); } /* * (non-Javadoc) * * @see junit.framework.TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); } /** * generates 1000 random PatientInfo objects, then extracts data from the * objects and searches for the random patients in the database. */ public void test_searchForPatient1() { Storage store = Storage.GetInstance(); Search search = Search.GetInstance(); List<PatientInfo> existingPatients = InputGenerator .getGeneratedPatients(); Assert.assertNotNull(existingPatients); for (int i = 0; i < 5; i++) { PatientInfo testPatient = InputGenerator.randomPatient(); HashMap<String, String> guineaPig = toHashMap(testPatient); String first = guineaPig.get("first_name"); String last = guineaPig.get("last_name"); DateWrapper dob = new DateWrapper(guineaPig.get("dob")); search.SearchForPatient(first, last, dob); HashMap<String, String> searchTerm = new HashMap<String, String>(); searchTerm.put("first_name", first); searchTerm.put("last_name", last); searchTerm.put("dob", dob.toString()); List<HashMap<String, String>> expectedHashMap = StorageWrapper.Retrieve( "cs320.patient", searchTerm); if (expectedHashMap.isEmpty()) { expectedHashMap.add(toHashMap(new PatientInfo(searchTerm))); } ListIterator<HashMap<String, String>> it = expectedHashMap .listIterator(); List<PatientInfo> expected = new LinkedList<PatientInfo>(); while (it.hasNext()) { expected.add(new PatientInfo(it.next())); } System.out.println("Expected: "); printResults(expected); System.out.print("\n"); System.out.println("Returned: "); printResults(search.getSearchResults()); System.out.print("\n\n"); ListIterator<PatientInfo> it1 = expected.listIterator(); ListIterator<PatientInfo> it2 = search.getSearchResults() .listIterator(); Assert.assertTrue(expected.size() == search.getSearchResults() .size()); while (it1.hasNext() && it2.hasNext()) { PatientInfo exp = it1.next(); PatientInfo act = it2.next(); Assert.assertEquals(exp.GetFirstName(), act.GetFirstName()); Assert.assertEquals(exp.GetLastName(), act.GetLastName()); Assert.assertEquals(exp.GetDateOfBirth().toString(), act.GetDateOfBirth().toString()); Assert.assertEquals(exp.GetHeight(), act.GetHeight()); Assert.assertEquals(exp.GetWeight(), act.GetWeight()); Assert.assertEquals(exp.GetGender(), act.GetGender()); Assert.assertEquals(exp.GetMedicalRecordNumber(), act .GetMedicalRecordNumber()); } } } /** * Iteratively walks through all patients in the database and attempts to * search for them. */ public void test_searchForPatient2() { Storage store = Storage.GetInstance(); Search search = Search.GetInstance(); List<HashMap<String, String>> existingPatients = StorageWrapper.Retrieve( "cs320.patient", null); Assert.assertNotNull(existingPatients); Assert.assertTrue(existingPatients.size() > 0); for (int i = 0; i < existingPatients.size(); i++) { PatientInfo testPatient = new PatientInfo(existingPatients.get(i)); HashMap<String, String> guineaPig = toHashMap(testPatient); String first = guineaPig.get("first_name"); String last = guineaPig.get("last_name"); DateWrapper dob = new DateWrapper(guineaPig.get("dob")); search.SearchForPatient(first, last, dob); HashMap<String, String> searchTerm = new HashMap<String, String>(); searchTerm.put("first_name", first); searchTerm.put("last_name", last); searchTerm.put("dob", dob.toString()); List<HashMap<String, String>> expectedHashMap = StorageWrapper.Retrieve( "cs320.patient", searchTerm); if (expectedHashMap.isEmpty()) { expectedHashMap.add(toHashMap(new PatientInfo(searchTerm))); } ListIterator<HashMap<String, String>> it = expectedHashMap .listIterator(); List<PatientInfo> expected = new LinkedList<PatientInfo>(); while (it.hasNext()) { expected.add(new PatientInfo(it.next())); } System.out.println("Expected: "); printResults(expected); System.out.print("\n"); System.out.println("Returned: "); printResults(search.getSearchResults()); System.out.print("\n\n"); ListIterator<PatientInfo> it1 = expected.listIterator(); ListIterator<PatientInfo> it2 = search.getSearchResults() .listIterator(); Assert.assertTrue(expected.size() == search.getSearchResults() .size()); while (it1.hasNext() && it2.hasNext()) { PatientInfo exp = it1.next(); PatientInfo act = it2.next(); Assert.assertEquals(exp.GetFirstName(), act.GetFirstName()); Assert.assertEquals(exp.GetLastName(), act.GetLastName()); Assert.assertEquals(exp.GetDateOfBirth().toString(), act.GetDateOfBirth().toString()); Assert.assertEquals(exp.GetHeight(), act.GetHeight()); Assert.assertEquals(exp.GetWeight(), act.GetWeight()); Assert.assertEquals(exp.GetGender(), act.GetGender()); Assert.assertEquals(exp.GetMedicalRecordNumber(), act .GetMedicalRecordNumber()); } } } /** * takes a list of PatientInfo objects, and prints each element in the list * one at a time. * * @param list * a list of PatientInfo objects */ public void printResults(List<PatientInfo> list) { ListIterator<PatientInfo> it = list.listIterator(); while (it.hasNext()) { printInfo(it.next()); } } /** * takes a PatientInfo object and prints all information stored in the * object * * @param info * the PatientInfo object to be printed */ public void printInfo(PatientInfo info) { System.out.println("First: " + info.GetFirstName()); System.out.println("Last: " + info.GetLastName()); System.out.println("DOB: " + info.GetDateOfBirth()); System.out.println("Gender: " + info.GetGender()); System.out.println("Height: " + info.GetHeight()); System.out.println("Weight: " + info.GetWeight()); System.out.println("Medical Record Number: " + info.GetMedicalRecordNumber() + "\n"); } public HashMap<String, String> toHashMap(PatientInfo patient) { HashMap<String, String> map = new HashMap<String, String>(); if (patient.GetFirstName() != "" && patient.GetFirstName() != null) { map.put("first_name", patient.GetFirstName()); } if (patient.GetLastName() != "" && patient.GetLastName() != null) { map.put("last_name", patient.GetLastName()); } if (patient.GetDateOfBirth() != null) { map.put("dob", patient.GetDateOfBirth().toString()); } if (patient.GetGender() != "" && patient.GetGender() != null) { map.put("sex", patient.GetGender()); } if (patient.GetHeight() != 0) { map.put("height", "" + patient.GetHeight()); } if (patient.GetWeight() != 0) { map.put("weight", "" + patient.GetWeight()); } if (patient.GetMedicalRecordNumber() != "") { map.put("mrn", "" + patient.GetMedicalRecordNumber()); } return map; } }