PatientValidatorTest.java
/**
* The contents of this file are subject to the OpenMRS Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://license.openmrs.org
*
* 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.
*
* Copyright (C) OpenMRS, LLC. All Rights Reserved.
*/
package org.openmrs.validator;
import java.util.Date;
import java.util.Set;
import org.junit.Assert;
import org.junit.Test;
import org.openmrs.Location;
import org.openmrs.Patient;
import org.openmrs.PatientIdentifier;
import org.openmrs.PatientIdentifierType;
import org.openmrs.PersonAddress;
import org.openmrs.PersonName;
import org.openmrs.api.context.Context;
import org.openmrs.test.Verifies;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
/**
* Tests methods on the {@link PatientValidator} class.
*/
public class PatientValidatorTest extends PersonValidatorTest {
@Autowired
@Qualifier("patientValidator")
@Override
public void setValidator(Validator validator) {
super.setValidator(validator);
}
/**
* @see {@link PatientValidator#validate(Object,Errors)}
*/
@Test
@Verifies(value = "should fail validation if a preferred patient identifier is not chosen", method = "validate(Object,Errors)")
public void validate_shouldFailValidationIfAPreferredPatientIdentifierIsNotChosen() throws Exception {
Patient pa = Context.getPatientService().getPatient(2);
Assert.assertNotNull(pa.getPatientIdentifier());
//set all identifiers to be non-preferred
for (PatientIdentifier id : pa.getIdentifiers())
id.setPreferred(false);
Errors errors = new BindException(pa, "patient");
validator.validate(pa, errors);
Assert.assertTrue(errors.hasErrors());
}
/**
* @see {@link PatientValidator#validate(Object,Errors)}
*/
@Test
@Verifies(value = "should fail validation if a preferred patient identifier is not chosen for voided patients", method = "validate(Object,Errors)")
public void validate_shouldFailValidationIfAPreferredPatientIdentifierIsNotChosenForVoidedPatients() throws Exception {
Patient pa = Context.getPatientService().getPatient(999);
Assert.assertTrue(pa.isVoided());//sanity check
Assert.assertNotNull(pa.getPatientIdentifier());
for (PatientIdentifier id : pa.getIdentifiers())
id.setPreferred(false);
Errors errors = new BindException(pa, "patient");
validator.validate(pa, errors);
Assert.assertTrue(errors.hasErrors());
}
/**
* @see PatientValidator#validate(Object,Errors)
* @verifies not fail when patient has only one identifier and its not preferred
*/
@Test
public void validate_shouldNotFailWhenPatientHasOnlyOneIdentifierAndItsNotPreferred() throws Exception {
PatientIdentifierType patientIdentifierType = Context.getPatientService().getAllPatientIdentifierTypes(false).get(0);
Patient patient = new Patient();
PersonName pName = new PersonName();
pName.setGivenName("Tom");
pName.setMiddleName("E.");
pName.setFamilyName("Patient");
patient.addName(pName);
patient.setGender("male");
PersonAddress pAddress = new PersonAddress();
pAddress.setAddress1("123 My street");
pAddress.setAddress2("Apt 402");
pAddress.setCityVillage("Anywhere city");
pAddress.setCountry("Some Country");
Set<PersonAddress> pAddressList = patient.getAddresses();
pAddressList.add(pAddress);
patient.setAddresses(pAddressList);
patient.addAddress(pAddress);
PatientIdentifier patientIdentifier1 = new PatientIdentifier();
patientIdentifier1.setLocation(new Location(1));
patientIdentifier1.setIdentifier("012345678");
patientIdentifier1.setDateCreated(new Date());
patientIdentifier1.setIdentifierType(patientIdentifierType);
patient.addIdentifier(patientIdentifier1);
Context.getPatientService().savePatient(patient);
}
}