/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is OpenEMRConnect.
*
* The Initial Developer of the Original Code is International Training &
* Education Center for Health (I-TECH) <http://www.go2itech.org/>
*
* Portions created by the Initial Developer are Copyright (C) 2011
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* ***** END LICENSE BLOCK ***** */
package ke.go.moh.oec.lib;
import ke.go.moh.oec.Visit;
import java.util.logging.Level;
import java.util.logging.Logger;
import ke.go.moh.oec.Fingerprint;
import java.util.ArrayList;
import ke.go.moh.oec.PersonIdentifier;
import java.util.Date;
import ke.go.moh.oec.RequestTypeId;
import java.util.List;
import ke.go.moh.oec.PersonResponse;
import ke.go.moh.oec.Person;
import ke.go.moh.oec.PersonRequest;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author Jim Grace
*/
public class MediatorTest {
static Mediator mediator = new Mediator();
public MediatorTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
/**
* Test of getProperty method, of class Mediator.
*/
@Test
public void testGetProperty() {
System.out.println("JUnit Test getProperty");
String propertyName = "Instance.Name";
String expResult = "Siaya TB Reception";
String result = Mediator.getProperty(propertyName);
assertEquals(expResult, result);
propertyName = "HTTPHandler.ListenPort";
expResult = "9723";
result = Mediator.getProperty(propertyName);
assertEquals(expResult, result);
}
private String n(String s) { // Protect against nulls for printing.
if (s == null) {
return "";
} else {
return s;
}
}
private String n(Date d) { // Protect against nulls for printing.
if (d == null) {
return "";
} else {
return d.toString();
}
}
private String n(Enum e) { // Protect against nulls for printing.
if (e == null) {
return "";
} else {
return e.name();
}
}
private String searchTerm(String label, String term) {
return term == null || term.isEmpty() ? "" : " " + label + ": " + term;
}
private PersonResponse callFindPerson(PersonRequest personRequest) {
Person p = personRequest.getPerson();
String log = "Searching for"
+ searchTerm("guid", p.getPersonGuid())
+ searchTerm("fname", p.getFirstName())
+ searchTerm("mname", p.getMiddleName())
+ searchTerm("lname", p.getLastName())
+ searchTerm("clan", p.getClanName())
+ searchTerm("other", p.getOtherName())
+ searchTerm("mfname", p.getMothersFirstName())
+ searchTerm("mmname", p.getMothersMiddleName())
+ searchTerm("mlname", p.getMothersLastName())
+ searchTerm("ffname", p.getFathersFirstName())
+ searchTerm("fmname", p.getFathersMiddleName())
+ searchTerm("flname", p.getFathersLastName())
+ searchTerm("cfname", p.getCompoundHeadFirstName())
+ searchTerm("cmname", p.getCompoundHeadMiddleName())
+ searchTerm("clname", p.getCompoundHeadLastName())
+ searchTerm("sex", n(p.getSex()))
+ searchTerm("birth", n(p.getBirthdate()))
+ searchTerm("death", n(p.getDeathdate()))
+ searchTerm("marital", n(p.getMaritalStatus()))
+ searchTerm("village", p.getVillageName())
+ searchTerm("clname", p.getCompoundHeadLastName()
+ searchTerm("site", p.getSiteName()));
List<PersonIdentifier> piList = p.getPersonIdentifierList();
if (piList != null) {
for (PersonIdentifier pi : piList) {
log += " pi(" + pi.getIdentifierType().name() + "): " + pi.getIdentifier();
}
}
System.out.println(log);
Object result = mediator.getData(RequestTypeId.FIND_PERSON_MPI, personRequest);
assertNotNull(result);
assertSame(PersonResponse.class, result.getClass());
PersonResponse personResponse = (PersonResponse) result;
assertTrue(personResponse.isSuccessful());
List<Person> pList = personResponse.getPersonList();
if (pList == null || pList.isEmpty()) {
System.out.println("No persons returned.");
} else {
for (Person person : pList) {
log = "guid: " + person.getPersonGuid()
+ " score: " + person.getMatchScore()
+ " name: " + n(person.getFirstName()) + " " + n(person.getMiddleName()) + " " + n(person.getLastName()) + " [" + n(person.getOtherName()) + "]"
+ " sex: " + n(person.getSex())
+ " birth/death: " + n(person.getBirthdate()) + "/" + n(person.getDeathdate())
+ " clan: " + n(person.getClanName())
+ " mother: " + n(person.getMothersFirstName()) + " " + n(person.getMothersMiddleName()) + " " + n(person.getMothersLastName())
+ " father: " + n(person.getFathersFirstName()) + " " + n(person.getFathersMiddleName()) + " " + n(person.getFathersLastName())
+ " compHead: " + n(person.getCompoundHeadFirstName()) + " " + n(person.getCompoundHeadMiddleName()) + " " + n(person.getCompoundHeadLastName())
+ " village: " + n(person.getVillageName())
+ " site: " + n(person.getSiteName())
+ " marital: " + n(person.getMaritalStatus());
piList = person.getPersonIdentifierList();
if (piList != null) {
for (PersonIdentifier pi : piList) {
log += " pi(" + pi.getIdentifierType().name() + "): " + pi.getIdentifier();
}
}
System.out.println(log);
}
}
System.out.flush(); // (So debugging printing isn't interspersed with subsequent printing.)
return personResponse;
}
/**
* FindPerson test of getData method, of class Mediator.
*/
@Test
public void testFindPerson() {
System.out.println("JUnit Test getData - findPerson");
String instanceName = Mediator.getProperty("Instance.Name");
System.out.println("Instance.Name = '" + instanceName + "'");
PersonRequest requestData = new PersonRequest();
Person p = new Person();
requestData.setPerson(p);
Object result;
PersonResponse pr;
List<Person> pList;
// Name that will not be found
p.setFirstName("O<NotAFirstName");
p.setClanName("O\"NotAClanName");
result = mediator.getData(RequestTypeId.FIND_PERSON_MPI, requestData);
assertNotNull(result);
assertSame(PersonResponse.class, result.getClass());
pr = (PersonResponse) result;
assertTrue(pr.isSuccessful());
assertNull(pr.getPersonList());
// Clan name having 8 matches in the first 100 people
p.setClanName("KONYANGO");
result = mediator.getData(RequestTypeId.FIND_PERSON_MPI, requestData);
assertNotNull(result);
assertSame(PersonResponse.class, result.getClass());
pr = (PersonResponse) result;
assertTrue(pr.isSuccessful());
pList = pr.getPersonList();
assertNotNull(pList);
int pCount = pList.size();
assertEquals(pCount, 8);
for (Person person : pList) {
System.out.println("guid: " + person.getPersonGuid()
+ " score: " + person.getMatchScore()
+ " name: " + n(person.getFirstName()) + " " + n(person.getMiddleName()) + " " + n(person.getLastName()) + " [" + n(person.getOtherName()) + "]"
+ " sex: " + n(person.getSex())
+ " birth/death: " + n(person.getBirthdate()) + "/" + n(person.getDeathdate())
+ " clan: " + n(person.getClanName())
+ " mother: " + n(person.getMothersFirstName()) + " " + n(person.getMothersMiddleName()) + " " + n(person.getMothersLastName())
+ " father: " + n(person.getFathersFirstName()) + " " + n(person.getFathersMiddleName()) + " " + n(person.getFathersLastName())
+ " compHead: " + n(person.getCompoundHeadFirstName()) + " " + n(person.getCompoundHeadMiddleName()) + " " + n(person.getCompoundHeadLastName())
+ " village: " + n(person.getVillageName())
+ " marital: " + n(person.getMaritalStatus()));
}
for (int i = 0; i < pList.size(); i++) {
Person person = pList.get(i);
assertNotNull(person.getFirstName());
assertNotNull(person.getMiddleName());
assertNotNull(person.getLastName());
// Make sure every returned person GUID is unique:
// Make sure every returned birthdate is unique:
for (int j = 0; j < i; j++) {
Person pj = pList.get(j);
assertFalse(pj.getPersonGuid().equals(person.getPersonGuid()));
assertFalse(pj.getBirthdate().equals(person.getBirthdate()));
}
}
Person p0 = pList.get(0);
int score = p0.getMatchScore();
assertEquals(score, 100);
requestData.setPerson(p0);
requestData.setRequestReference(pr.getRequestReference());
result = mediator.getData(RequestTypeId.MODIFY_PERSON_MPI, requestData);
// Exercise fingerprint matching code
p0 = new Person();
List<Fingerprint> fpList = new ArrayList<Fingerprint>();
byte[] b = {1, 2, 3};
Fingerprint f = new Fingerprint();
f.setTemplate(b);
f.setFingerprintType(Fingerprint.Type.rightRingFinger);
f.setTechnologyType(Fingerprint.TechnologyType.griauleTemplate);
fpList.add(f);
p0.setFingerprintList(fpList);
requestData.setPerson(p0);
pr = callFindPerson(requestData);
}
/**
* FindPerson test of getData method, of class Mediator.
*/
@Test
public void testFindPersonLPI() {
System.out.println("JUnit Test getData - findPerson in the LPI");
PersonRequest requestData = new PersonRequest();
Person p = new Person();
requestData.setPerson(p);
Object result;
PersonResponse pr;
List<Person> pList;
PersonIdentifier pi = new PersonIdentifier();
pi.setIdentifier("00007/2004");
pi.setIdentifierType(PersonIdentifier.Type.cccLocalId);
List<PersonIdentifier> piList = new ArrayList<PersonIdentifier>();
piList.add(pi);
p.setPersonIdentifierList(piList);
p.setSiteName("Siaya");
requestData.setPerson(p);
pr = callFindPerson(requestData);
assertNotNull(pr);
if (pr != null) {
pList = pr.getPersonList();
if (pList != null && !pList.isEmpty()) {
p = pList.get(0);
requestData.setPerson(p);
requestData.setRequestReference(pr.getRequestReference());
result = mediator.getData(RequestTypeId.MODIFY_PERSON_MPI, requestData);
}
}
}
/**
* Test of getData method, request type CREATE_PERSON_MPI
*/
@Test
public void testModifyPerson() {
System.out.println("testModifyPerson");
PersonRequest requestData = new PersonRequest();
Person p;
List<Person> pList;
PersonIdentifier pi;
List<PersonIdentifier> piList;
int pCount;
Object result;
PersonResponse pr;
// Modify the person (will not exist) -- just to test QueueManager
p = new Person();
requestData.setPerson(p);
pi = new PersonIdentifier();
piList = new ArrayList<PersonIdentifier>();
pi.setIdentifier("33333-44444");
pi.setIdentifierType(PersonIdentifier.Type.patientRegistryId);
piList.add(pi);
p.setPersonIdentifierList(piList);
Visit v = new Visit();
v.setVisitDate(new Date());
v.setAddress("ke.go.moh.test.address");
v.setFacilityName("Test Facility");
p.setLastRegularVisit(v);
pr = (PersonResponse) mediator.getData(RequestTypeId.MODIFY_PERSON_MPI, requestData);
try {
Thread.sleep(10*1000); // Sleep 10 seconds.
} catch (InterruptedException ex) {
Logger.getLogger(MediatorTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}