/**
* 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.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.Obs;
import org.openmrs.Order;
import org.openmrs.Patient;
import org.openmrs.User;
import org.openmrs.api.context.Context;
import org.openmrs.test.BaseContextSensitiveTest;
import org.openmrs.test.Verifies;
/**
* Contains the tests for the {@link PatientDataVoidHandler}
*/
public class PatientDataVoidHandlerTest extends BaseContextSensitiveTest {
/**
* @see {@link PatientDataVoidHandler#handle(Patient,User,Date,String)}
*/
@Test
@Verifies(value = "should void the orders encounters and observations associated with the patient", method = "handle(Patient,User,Date,String)")
public void handle_shouldVoidTheOrdersEncountersAndObservationsAssociatedWithThePatient() throws Exception {
Patient patient = Context.getPatientService().getPatient(7);
Assert.assertFalse(patient.isVoided());
List<Encounter> encounters = Context.getEncounterService().getEncountersByPatient(patient);
List<Obs> observations = Context.getObsService().getObservationsByPerson(patient);
List<Order> orders = Context.getOrderService().getOrdersByPatient(patient);
//we should have some unvoided encounters, obs and orders for the test to be concrete
Assert.assertTrue(CollectionUtils.isNotEmpty(encounters));
Assert.assertTrue(CollectionUtils.isNotEmpty(observations));
Assert.assertTrue(CollectionUtils.isNotEmpty(orders));
//check that fields to be set by the handler are initially null
for (Encounter encounter : encounters) {
Assert.assertNull(encounter.getDateVoided());
Assert.assertNull(encounter.getVoidedBy());
Assert.assertNull(encounter.getVoidReason());
}
for (Obs obs : observations) {
Assert.assertNull(obs.getDateVoided());
Assert.assertNull(obs.getVoidedBy());
Assert.assertNull(obs.getVoidReason());
}
for (Order order : orders) {
Assert.assertNull(order.getDateVoided());
Assert.assertNull(order.getVoidedBy());
Assert.assertNull(order.getVoidReason());
}
new PatientDataVoidHandler().handle(patient, new User(1), new Date(), "voidReason");
//all encounters void related fields should have been set
for (Encounter encounter : encounters) {
Assert.assertTrue(encounter.isVoided());
Assert.assertNotNull(encounter.getDateVoided());
Assert.assertNotNull(encounter.getVoidedBy());
Assert.assertNotNull(encounter.getVoidReason());
}
//all obs void related fields should have been set
for (Obs obs : observations) {
Assert.assertTrue(obs.isVoided());
Assert.assertNotNull(obs.getDateVoided());
Assert.assertNotNull(obs.getVoidedBy());
Assert.assertNotNull(obs.getVoidReason());
}
//all order void related fields should have been set
for (Order order : orders) {
Assert.assertTrue(order.isVoided());
Assert.assertNotNull(order.getDateVoided());
Assert.assertNotNull(order.getVoidedBy());
Assert.assertNotNull(order.getVoidReason());
}
//refresh the lists and check that all encounters, obs and orders were voided
encounters = Context.getEncounterService().getEncountersByPatient(patient);
observations = Context.getObsService().getObservationsByPerson(patient);
orders = Context.getOrderService().getOrdersByPatient(patient);
Assert.assertTrue(CollectionUtils.isEmpty(encounters));
Assert.assertTrue(CollectionUtils.isEmpty(observations));
Assert.assertTrue(CollectionUtils.isEmpty(orders));
}
}