/**
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs.module.radiology.order;
import static org.mockito.Mockito.when;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.Mock;
import org.openmrs.Provider;
import org.openmrs.api.APIException;
import org.openmrs.test.BaseContextMockTest;
/**
* Tests {@link RadiologyOrderService}
*/
public class RadiologyOrderServiceTest extends BaseContextMockTest {
private static final int EXISTING_RADIOLOGY_ORDER_ID = 2001;
private static final String DISCONTINUE_REASON = "Wrong Procedure";
private RadiologyOrderService radiologyOrderService = new RadiologyOrderServiceImpl();
@Mock
private RadiologyOrder radiologyOrder;
@Mock
private Provider orderer;
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void shouldFailToSaveRadiologyOrderGivenNull() {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("radiologyOrder cannot be null");
radiologyOrderService.placeRadiologyOrder(null);
}
@Test
public void shouldFailToSaveRadiologyOrderIfGivenRadiologyOrderHasNoStudy() {
when(radiologyOrder.getOrderId()).thenReturn(null);
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("radiologyOrder.study cannot be null");
radiologyOrderService.placeRadiologyOrder(radiologyOrder);
}
@Test
public void shouldFailToSaveRadiologyOrderGivenAnExistingOne() {
when(radiologyOrder.getOrderId()).thenReturn(EXISTING_RADIOLOGY_ORDER_ID);
expectedException.expect(APIException.class);
expectedException.expectMessage("Order.cannot.edit.existing");
radiologyOrderService.placeRadiologyOrder(radiologyOrder);
}
@Test
public void shouldFailToDiscontinueRadiologyOrderIfGivenNull() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("radiologyOrder cannot be null");
radiologyOrderService.discontinueRadiologyOrder(null, orderer, DISCONTINUE_REASON);
}
@Test
public void shouldFailToDiscontinueRadiologyOrderIfGivenRadiologyOrderWithOrderIdNull() throws Exception {
when(radiologyOrder.getOrderId()).thenReturn(null);
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("radiologyOrder.orderId cannot be null, can only discontinue existing order");
radiologyOrderService.discontinueRadiologyOrder(radiologyOrder, orderer, DISCONTINUE_REASON);
}
@Test
public void shouldFailToDiscontinueRadiologyOrderIfGivenOrdererIsNull() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("orderer cannot be null");
radiologyOrderService.discontinueRadiologyOrder(radiologyOrder, null, DISCONTINUE_REASON);
}
@Test
public void shouldFailToDiscontinueRadiologyOrderIfGivenRadiologyOrderIsDiscontinued() throws Exception {
when(radiologyOrder.isDiscontinuedRightNow()).thenReturn(true);
when(radiologyOrder.getOrderer()).thenReturn(orderer);
expectedException.expect(APIException.class);
expectedException.expectMessage("RadiologyOrder.cannot.discontinue.discontinued");
radiologyOrderService.discontinueRadiologyOrder(radiologyOrder, orderer, DISCONTINUE_REASON);
}
@Test
public void shouldFailToDiscontinueRadiologyOrderIfGivenRadiologyOrderIsInProgress() throws Exception {
when(radiologyOrder.getOrderer()).thenReturn(orderer);
when(radiologyOrder.isInProgress()).thenReturn(true);
expectedException.expect(APIException.class);
expectedException.expectMessage("RadiologyOrder.cannot.discontinue.inProgressOrcompleted");
radiologyOrderService.discontinueRadiologyOrder(radiologyOrder, orderer, DISCONTINUE_REASON);
}
@Test
public void shouldFailToDiscontinueRadiologyOrderIfGivenRadiologyOrderIsCompleted() throws Exception {
when(radiologyOrder.getOrderer()).thenReturn(orderer);
when(radiologyOrder.isCompleted()).thenReturn(true);
expectedException.expect(APIException.class);
expectedException.expectMessage("RadiologyOrder.cannot.discontinue.inProgressOrcompleted");
radiologyOrderService.discontinueRadiologyOrder(radiologyOrder, orderer, DISCONTINUE_REASON);
}
@Test
public void shouldFailToGetRadiologyOrderByIdIfGivenNull() {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("orderId cannot be null");
radiologyOrderService.getRadiologyOrder(null);
}
@Test
public void shouldFailToGetRadiologyOrderByUuidIfGivenNull() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("uuid cannot be null");
radiologyOrderService.getRadiologyOrderByUuid(null);
}
@Test
public void shouldFailToGetRadiologyOrdersIfGivenNull() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("radiologyOrderSearchCriteria cannot be null");
radiologyOrderService.getRadiologyOrders(null);
}
}