/**
* 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.api.handler;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.junit.Assert;
import org.junit.Test;
import org.openmrs.Encounter;
import org.openmrs.Order;
import org.openmrs.Patient;
import org.openmrs.User;
import org.openmrs.api.EncounterService;
import org.openmrs.api.OrderService;
import org.openmrs.api.OrderService.ORDER_STATUS;
import org.openmrs.api.context.Context;
import org.openmrs.test.BaseContextSensitiveTest;
import org.openmrs.test.Verifies;
/**
* Contains the tests for the {@link PatientDataUnvoidHandler}
*/
public class PatientDataUnvoidHandlerTest extends BaseContextSensitiveTest {
/**
* @see {@link PatientDataUnvoidHandler#handle(Patient,User,Date,String)}
*/
@Test
@Verifies(value = "should unvoid the orders and encounters associated with the patient", method = "handle(Patient,User,Date,String)")
public void handle_shouldUnvoidTheOrdersAndEncountersAssociatedWithThePatient() throws Exception {
Patient patient = Context.getPatientService().getPatient(7);
patient = Context.getPatientService().voidPatient(patient, "Void Reason");
Assert.assertTrue(patient.isVoided());
EncounterService es = Context.getEncounterService();
List<Encounter> encounters = es.getEncounters(patient, null, null, null, null, null, null, true);
Assert.assertTrue(CollectionUtils.isNotEmpty(encounters));
//all encounters void related fields should be null
for (Encounter encounter : encounters) {
Assert.assertTrue(encounter.isVoided());
Assert.assertNotNull(encounter.getDateVoided());
Assert.assertNotNull(encounter.getVoidedBy());
Assert.assertNotNull(encounter.getVoidReason());
}
OrderService os = Context.getOrderService();
List<Patient> patients = new ArrayList<Patient>();
patients.add(patient);
List<Order> orders = os.getOrders(Order.class, patients, null, ORDER_STATUS.ANY, null, null, null);
Assert.assertTrue(CollectionUtils.isNotEmpty(orders));
//all order void related fields should be null
for (Order order : orders) {
Assert.assertTrue(order.isVoided());
Assert.assertNotNull(order.getDateVoided());
Assert.assertNotNull(order.getVoidedBy());
Assert.assertNotNull(order.getVoidReason());
}
new PatientDataUnvoidHandler().handle(patient, new User(1), patient.getDateVoided(), null);
//check that the voided related fields were set null
for (Encounter encounter : encounters) {
Assert.assertFalse(encounter.isVoided());
Assert.assertNull(encounter.getDateVoided());
Assert.assertNull(encounter.getVoidedBy());
Assert.assertNull(encounter.getVoidReason());
}
for (Order order : orders) {
Assert.assertFalse(order.isVoided());
Assert.assertNull(order.getDateVoided());
Assert.assertNull(order.getVoidedBy());
Assert.assertNull(order.getVoidReason());
}
}
/**
* @see {@link PatientDataUnvoidHandler#handle(Patient,User,Date,String)}
*/
@Test
@Verifies(value = "should not unvoid the orders and encounters that never got voided with the patient", method = "handle(Patient,User,Date,String)")
public void handle_shouldNotUnvoidTheOrdersAndEncountersThatNeverGotVoidedWithThePatient() throws Exception {
Patient patient = Context.getPatientService().getPatient(7);
EncounterService es = Context.getEncounterService();
OrderService os = Context.getOrderService();
//void one of the unvoided encounters for testing purposes
Encounter testEncounter = es.getEncountersByPatient(patient).get(0);
//santy checks
Assert.assertNotNull(testEncounter);
Assert.assertNull(testEncounter.getDateVoided());
Assert.assertNull(testEncounter.getVoidedBy());
Assert.assertNull(testEncounter.getVoidReason());
es.voidEncounter(testEncounter, "random reason");
Assert.assertTrue(testEncounter.isVoided());
//void one of the unvoided orders for testing purposes
Order testOrder = os.getOrdersByPatient(patient).get(0);
Assert.assertNotNull(testOrder);
Assert.assertNull(testOrder.getDateVoided());
Assert.assertNull(testOrder.getVoidedBy());
Assert.assertNull(testOrder.getVoidReason());
os.voidOrder(testOrder, "random reason");
Assert.assertTrue(testOrder.isVoided());
//now void the patient for testing purposes
patient = Context.getPatientService().voidPatient(patient, "Void Reason");
Assert.assertTrue(patient.isVoided());
new PatientDataUnvoidHandler().handle(patient, patient.getVoidedBy(), patient.getDateVoided(), null);
//the encounter that was initially voided separately should still be voided
testEncounter = es.getEncounter(testEncounter.getId());
Assert.assertTrue(testEncounter.isVoided());
Assert.assertNotNull(testEncounter.getDateVoided());
Assert.assertNotNull(testEncounter.getVoidedBy());
Assert.assertNotNull(testEncounter.getVoidReason());
//the order that was initially voided separately should still be voided
Assert.assertTrue(testOrder.isVoided());
Assert.assertNotNull(testOrder.getDateVoided());
Assert.assertNotNull(testOrder.getVoidedBy());
Assert.assertNotNull(testOrder.getVoidReason());
}
}