/**
* 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.web;
import static org.hamcrest.collection.IsMapContaining.hasKey;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import java.lang.reflect.Method;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.openmrs.Order;
import org.openmrs.Patient;
import org.openmrs.api.APIException;
import org.openmrs.api.OrderService;
import org.openmrs.module.radiology.RadiologyProperties;
import org.openmrs.module.radiology.dicom.DicomWebViewer;
import org.openmrs.module.radiology.dicom.code.PerformedProcedureStepStatus;
import org.openmrs.module.radiology.order.RadiologyOrder;
import org.openmrs.module.radiology.order.RadiologyOrderService;
import org.openmrs.module.radiology.order.RadiologyOrderValidator;
import org.openmrs.module.radiology.report.RadiologyReport;
import org.openmrs.module.radiology.report.RadiologyReportService;
import org.openmrs.module.radiology.report.RadiologyReportStatus;
import org.openmrs.module.radiology.test.RadiologyTestData;
import org.openmrs.test.BaseContextMockTest;
import org.openmrs.web.WebConstants;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpSession;
import org.springframework.validation.BindingResult;
import org.springframework.web.servlet.ModelAndView;
/**
* Tests {@link RadiologyOrderFormController}
*/
public class RadiologyOrderFormControllerTest extends BaseContextMockTest {
@Mock
private OrderService orderService;
@Mock
private RadiologyOrderService radiologyOrderService;
@Mock
private RadiologyReportService radiologyReportService;
@Mock
private RadiologyProperties radiologyProperties;
@Mock
private DicomWebViewer dicomWebViewer;
@Mock
RadiologyOrderValidator radiologyOrderValidator;
@Mock
DiscontinuationOrderRequestValidator discontinuationOrderRequestValidator;
@InjectMocks
private RadiologyOrderFormController radiologyOrderFormController = new RadiologyOrderFormController();
private Method radiologyReportNeedsToBeCreatedMethod = null;
@Before
public void setUp() throws Exception {
when(radiologyProperties.getRadiologyTestOrderType()).thenReturn(RadiologyTestData.getMockRadiologyOrderType());
radiologyReportNeedsToBeCreatedMethod =
RadiologyOrderFormController.class.getDeclaredMethod("radiologyReportNeedsToBeCreated",
new Class[] { org.springframework.web.servlet.ModelAndView.class, org.openmrs.Order.class });
radiologyReportNeedsToBeCreatedMethod.setAccessible(true);
}
@Test
public void shouldPopulateModelAndViewWithNewRadiologyOrder() throws Exception {
ModelAndView modelAndView = radiologyOrderFormController.getRadiologyOrderFormWithNewRadiologyOrder();
assertNotNull(modelAndView);
assertThat(modelAndView.getViewName(), is(RadiologyOrderFormController.RADIOLOGY_ORDER_CREATION_FORM_VIEW));
assertThat(modelAndView.getModelMap(), hasKey("radiologyOrder"));
RadiologyOrder order = (RadiologyOrder) modelAndView.getModelMap()
.get("radiologyOrder");
assertNull(order.getOrderId());
assertNotNull(order.getStudy());
assertNull(order.getStudy()
.getStudyId());
assertNull(order.getOrderer());
}
@Test
public void
getRadiologyOrderFormWithNewRadiologyOrderAndPrefilledPatient_shouldPopulateModelAndViewWithNewRadiologyOrderPrefilledWithGivenPatient()
throws Exception {
// given
Patient mockPatient = RadiologyTestData.getMockPatient1();
ModelAndView modelAndView =
radiologyOrderFormController.getRadiologyOrderFormWithNewRadiologyOrderAndPrefilledPatient(mockPatient);
assertNotNull(modelAndView);
assertThat(modelAndView.getViewName(), is(RadiologyOrderFormController.RADIOLOGY_ORDER_CREATION_FORM_VIEW));
assertThat(modelAndView.getModelMap(), hasKey("radiologyOrder"));
RadiologyOrder order = (RadiologyOrder) modelAndView.getModelMap()
.get("radiologyOrder");
assertNull(order.getOrderId());
assertNotNull(order.getStudy());
assertNull(order.getStudy()
.getStudyId());
assertNotNull(order.getPatient());
assertThat(order.getPatient(), is(mockPatient));
assertThat(modelAndView.getModelMap(), hasKey("patientId"));
Integer patientId = (Integer) modelAndView.getModelMap()
.get("patientId");
assertThat(patientId, is(mockPatient.getPatientId()));
}
@Test
public void
getRadiologyOrderFormWithExistingRadiologyOrder_shouldPopulateModelAndViewWithExistingRadiologyOrderIfGivenOrderIdMatchesARadiologyOrderAndNoDicomViewerUrlIfOrderIsNotCompleted()
throws Exception {
// given
RadiologyOrder mockRadiologyOrderInProgress = RadiologyTestData.getMockRadiologyOrder1();
mockRadiologyOrderInProgress.getStudy()
.setPerformedStatus(PerformedProcedureStepStatus.IN_PROGRESS);
ModelAndView modelAndView =
radiologyOrderFormController.getRadiologyOrderFormWithExistingRadiologyOrder(mockRadiologyOrderInProgress);
assertNotNull(modelAndView);
assertThat(modelAndView.getViewName(), is(RadiologyOrderFormController.RADIOLOGY_ORDER_FORM_VIEW));
assertThat(modelAndView.getModelMap(), hasKey("order"));
RadiologyOrder order = (RadiologyOrder) modelAndView.getModelMap()
.get("order");
assertThat(order, is(mockRadiologyOrderInProgress));
assertThat(modelAndView.getModelMap(), hasKey("radiologyOrder"));
RadiologyOrder radiologyOrder = (RadiologyOrder) modelAndView.getModelMap()
.get("radiologyOrder");
assertThat(radiologyOrder, is(mockRadiologyOrderInProgress));
assertThat(modelAndView.getModelMap(), not(hasKey("dicomViewerUrl")));
}
@Test
public void
getRadiologyOrderFormWithExistingRadiologyOrder_shouldPopulateModelAndViewWithExistingRadiologyOrderIfGivenOrderIdMatchesARadiologyOrderAndDicomViewerUrlIfOrderCompleted()
throws Exception {
// given
RadiologyOrder mockCompletedRadiologyOrder = RadiologyTestData.getMockRadiologyOrder1();
mockCompletedRadiologyOrder.getStudy()
.setPerformedStatus(PerformedProcedureStepStatus.COMPLETED);
when(dicomWebViewer.getDicomViewerUrl(mockCompletedRadiologyOrder.getStudy()))
.thenReturn("http://localhost:8081/weasis-pacs-connector/viewer?studyUID=1.2.826.0.1.3680043.8.2186.1.1");
ModelAndView modelAndView =
radiologyOrderFormController.getRadiologyOrderFormWithExistingRadiologyOrder(mockCompletedRadiologyOrder);
assertNotNull(modelAndView);
assertThat(modelAndView.getViewName(), is(RadiologyOrderFormController.RADIOLOGY_ORDER_FORM_VIEW));
assertThat(modelAndView.getModelMap(), hasKey("order"));
RadiologyOrder order = (RadiologyOrder) modelAndView.getModelMap()
.get("order");
assertThat(order, is(mockCompletedRadiologyOrder));
assertThat(modelAndView.getModelMap(), hasKey("radiologyOrder"));
RadiologyOrder radiologyOrder = (RadiologyOrder) modelAndView.getModelMap()
.get("radiologyOrder");
assertThat(radiologyOrder, is(mockCompletedRadiologyOrder));
assertThat(modelAndView.getModelMap(), hasKey("dicomViewerUrl"));
String dicomViewerUrl = (String) modelAndView.getModelMap()
.get("dicomViewerUrl");
assertThat(dicomViewerUrl,
is("http://localhost:8081/weasis-pacs-connector/viewer?studyUID=1.2.826.0.1.3680043.8.2186.1.1"));
}
@Test
public void
getRadiologyOrderFormWithExistingRadiologyOrder_shouldPopulateModelAndViewWithExistingOrderIfGivenOrderIdOnlyMatchesAnOrderAndNotARadiologyOrder()
throws Exception {
// given
RadiologyOrder mockRadiologyOrderToDiscontinue = RadiologyTestData.getMockRadiologyOrder1();
String discontinueReason = "Wrong Procedure";
Order mockDiscontinuationOrder = new Order();
mockDiscontinuationOrder.setOrderId(2);
mockDiscontinuationOrder.setAction(Order.Action.DISCONTINUE);
mockDiscontinuationOrder.setOrderer(mockRadiologyOrderToDiscontinue.getOrderer());
mockDiscontinuationOrder.setOrderReasonNonCoded(discontinueReason);
mockDiscontinuationOrder.setPreviousOrder(mockRadiologyOrderToDiscontinue);
ModelAndView modelAndView =
radiologyOrderFormController.getRadiologyOrderFormWithExistingRadiologyOrder(mockDiscontinuationOrder);
assertNotNull(modelAndView);
assertThat(modelAndView.getViewName(), is(RadiologyOrderFormController.RADIOLOGY_ORDER_FORM_VIEW));
assertThat(modelAndView.getModelMap(), hasKey("order"));
Order order = (Order) modelAndView.getModelMap()
.get("order");
assertThat(order, is(mockDiscontinuationOrder));
assertThat(modelAndView.getModelMap(), not(hasKey("radiologyOrder")));
assertThat(modelAndView.getModelMap(), not(hasKey("dicomViewerUrl")));
}
@Test
public void
saveRadiologyOrder_shouldSaveGivenRadiologyOrderIfValidAndSetHttpSessionAttributeOpenmrsMessageToOrderSavedAndRedirectToNewRadiologyOrder()
throws Exception {
// given
RadiologyOrder mockRadiologyOrder = RadiologyTestData.getMockRadiologyOrder1();
when(radiologyOrderService.placeRadiologyOrder(mockRadiologyOrder)).thenReturn(mockRadiologyOrder);
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.addParameter("saveOrder", "saveOrder");
MockHttpSession mockSession = new MockHttpSession();
mockRequest.setSession(mockSession);
BindingResult orderErrors = mock(BindingResult.class);
when(orderErrors.hasErrors()).thenReturn(false);
ModelAndView modelAndView =
radiologyOrderFormController.saveRadiologyOrder(mockRequest, mockRadiologyOrder, orderErrors);
verify(radiologyOrderService, times(1)).placeRadiologyOrder(mockRadiologyOrder);
verifyNoMoreInteractions(radiologyOrderService);
assertNotNull(modelAndView);
assertThat(modelAndView.getViewName(),
is("redirect:/module/radiology/radiologyOrder.form?orderId=" + mockRadiologyOrder.getOrderId()));
assertThat((String) mockSession.getAttribute(WebConstants.OPENMRS_MSG_ATTR), is("Order.saved"));
}
@Test
public void shouldNotSaveGivenRadiologyOrderIfItIsNotValidAndNotRedirect() throws Exception {
// given
RadiologyOrder mockRadiologyOrder = RadiologyTestData.getMockRadiologyOrder1();
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.addParameter("saveOrder", "saveOrder");
MockHttpSession mockSession = new MockHttpSession();
mockRequest.setSession(mockSession);
BindingResult orderErrors = mock(BindingResult.class);
when(orderErrors.hasErrors()).thenReturn(true);
ModelAndView modelAndView =
radiologyOrderFormController.saveRadiologyOrder(mockRequest, mockRadiologyOrder, orderErrors);
verifyZeroInteractions(radiologyOrderService);
assertNotNull(modelAndView);
assertThat(modelAndView.getViewName(), is(RadiologyOrderFormController.RADIOLOGY_ORDER_CREATION_FORM_VIEW));
assertThat(modelAndView.getModelMap(), hasKey("order"));
Order order = (Order) modelAndView.getModelMap()
.get("order");
assertThat(order, is(mockRadiologyOrder));
assertThat(modelAndView.getModelMap(), hasKey("radiologyOrder"));
RadiologyOrder radiologyOrder = (RadiologyOrder) modelAndView.getModelMap()
.get("radiologyOrder");
assertThat(radiologyOrder, is(mockRadiologyOrder));
}
@Test
public void
saveRadiologyOrder_shouldNotRedirectAndSetSessionAttributeWithOpenmrsErrorIfApiExceptionIsThrownByPlaceRadiology()
throws Exception {
// given
RadiologyOrder mockRadiologyOrder = RadiologyTestData.getMockRadiologyOrder1();
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.addParameter("saveOrder", "saveOrder");
MockHttpSession mockSession = new MockHttpSession();
mockRequest.setSession(mockSession);
BindingResult orderErrors = mock(BindingResult.class);
when(orderErrors.hasErrors()).thenReturn(false);
when(radiologyOrderService.placeRadiologyOrder(mockRadiologyOrder))
.thenThrow(new APIException("Order.cannot.edit.existing"));
ModelAndView modelAndView =
radiologyOrderFormController.saveRadiologyOrder(mockRequest, mockRadiologyOrder, orderErrors);
verify(radiologyOrderService, times(1)).placeRadiologyOrder(mockRadiologyOrder);
verifyNoMoreInteractions(radiologyOrderService);
assertNotNull(modelAndView);
assertThat(modelAndView.getViewName(), is(RadiologyOrderFormController.RADIOLOGY_ORDER_CREATION_FORM_VIEW));
assertThat(modelAndView.getModelMap(), hasKey("order"));
Order order = (Order) modelAndView.getModelMap()
.get("order");
assertThat(order, is(mockRadiologyOrder));
assertThat(modelAndView.getModelMap(), hasKey("radiologyOrder"));
RadiologyOrder radiologyOrder = (RadiologyOrder) modelAndView.getModelMap()
.get("radiologyOrder");
assertThat(radiologyOrder, is(mockRadiologyOrder));
assertThat((String) mockSession.getAttribute(WebConstants.OPENMRS_ERROR_ATTR), is("Order.cannot.edit.existing"));
}
@Test
public void shouldDiscontinueNonDiscontinuedRadiologyOrderAndRedirectToDiscontinuationOrder() throws Exception {
// given
RadiologyOrder mockRadiologyOrderToDiscontinue = RadiologyTestData.getMockRadiologyOrder1();
DiscontinuationOrderRequest discontinuationOrderRequest = new DiscontinuationOrderRequest();
discontinuationOrderRequest.setOrderer(mockRadiologyOrderToDiscontinue.getOrderer());
discontinuationOrderRequest.setReasonNonCoded("Wrong Procedure");
Order mockDiscontinuationOrder = new Order();
mockDiscontinuationOrder.setOrderId(2);
mockDiscontinuationOrder.setAction(Order.Action.DISCONTINUE);
mockDiscontinuationOrder.setOrderer(discontinuationOrderRequest.getOrderer());
mockDiscontinuationOrder.setOrderReasonNonCoded(discontinuationOrderRequest.getReasonNonCoded());
mockDiscontinuationOrder.setPreviousOrder(mockRadiologyOrderToDiscontinue);
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.addParameter("discontinueOrder", "discontinueOrder");
MockHttpSession mockSession = new MockHttpSession();
mockRequest.setSession(mockSession);
when(radiologyOrderService.discontinueRadiologyOrder(mockRadiologyOrderToDiscontinue,
mockDiscontinuationOrder.getOrderer(), mockDiscontinuationOrder.getOrderReasonNonCoded()))
.thenReturn(mockDiscontinuationOrder);
BindingResult resultDiscontinueOrderRequest = mock(BindingResult.class);
assertThat(mockRadiologyOrderToDiscontinue.getAction(), is(Order.Action.NEW));
ModelAndView modelAndView = radiologyOrderFormController.discontinueRadiologyOrder(mockRequest,
mockRadiologyOrderToDiscontinue, discontinuationOrderRequest, resultDiscontinueOrderRequest);
verify(radiologyOrderService, times(1)).discontinueRadiologyOrder(mockRadiologyOrderToDiscontinue,
discontinuationOrderRequest.getOrderer(), discontinuationOrderRequest.getReasonNonCoded());
verifyNoMoreInteractions(radiologyOrderService);
assertNotNull(modelAndView);
assertThat(modelAndView.getViewName(),
is("redirect:/module/radiology/radiologyOrder.form?orderId=" + mockDiscontinuationOrder.getOrderId()));
assertThat((String) mockSession.getAttribute(WebConstants.OPENMRS_MSG_ATTR), is("Order.discontinuedSuccessfully"));
}
@Test
public void
discontinueRadiologyOrder_shouldNotDiscontinueGivenRadiologyOrderAndNotRedirectIfDiscontinuationOrderRequestIsNotValid()
throws Exception {
// given
RadiologyOrder mockRadiologyOrderToDiscontinue = RadiologyTestData.getMockRadiologyOrder1();
DiscontinuationOrderRequest discontinuationOrderRequest = new DiscontinuationOrderRequest();
discontinuationOrderRequest.setOrderer(mockRadiologyOrderToDiscontinue.getOrderer());
discontinuationOrderRequest.setReasonNonCoded("");
Order mockDiscontinuationOrder = new Order();
mockDiscontinuationOrder.setOrderId(2);
mockDiscontinuationOrder.setAction(Order.Action.DISCONTINUE);
mockDiscontinuationOrder.setOrderer(discontinuationOrderRequest.getOrderer());
mockDiscontinuationOrder.setOrderReasonNonCoded(discontinuationOrderRequest.getReasonNonCoded());
mockDiscontinuationOrder.setPreviousOrder(mockRadiologyOrderToDiscontinue);
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.addParameter("discontinueOrder", "discontinueOrder");
MockHttpSession mockSession = new MockHttpSession();
mockRequest.setSession(mockSession);
when(radiologyOrderService.discontinueRadiologyOrder(mockRadiologyOrderToDiscontinue,
mockDiscontinuationOrder.getOrderer(), mockDiscontinuationOrder.getOrderReasonNonCoded()))
.thenReturn(mockDiscontinuationOrder);
BindingResult resultDiscontinueOrderRequest = mock(BindingResult.class);
when(resultDiscontinueOrderRequest.hasErrors()).thenReturn(true);
assertThat(mockRadiologyOrderToDiscontinue.getAction(), is(Order.Action.NEW));
ModelAndView modelAndView = radiologyOrderFormController.discontinueRadiologyOrder(mockRequest,
mockRadiologyOrderToDiscontinue, discontinuationOrderRequest, resultDiscontinueOrderRequest);
verifyZeroInteractions(radiologyOrderService);
assertNotNull(modelAndView);
assertThat(modelAndView.getViewName(), is(RadiologyOrderFormController.RADIOLOGY_ORDER_FORM_VIEW));
assertThat(modelAndView.getModelMap(), hasKey("order"));
Order order = (Order) modelAndView.getModelMap()
.get("order");
assertThat(order, is(mockRadiologyOrderToDiscontinue));
assertThat(modelAndView.getModelMap(), hasKey("radiologyOrder"));
RadiologyOrder radiologyOrder = (RadiologyOrder) modelAndView.getModelMap()
.get("radiologyOrder");
assertThat(radiologyOrder, is(mockRadiologyOrderToDiscontinue));
}
@Test
public void
discontinueRadiologyOrder_shouldNotRedirectAndSetSessionAttributeWithOpenmrsErrorIfApiExceptionIsThrownByDiscontinueRadiologyOrder()
throws Exception {
// given
RadiologyOrder mockRadiologyOrderToDiscontinue = RadiologyTestData.getMockRadiologyOrder1();
DiscontinuationOrderRequest discontinuationOrderRequest = new DiscontinuationOrderRequest();
discontinuationOrderRequest.setOrderer(mockRadiologyOrderToDiscontinue.getOrderer());
discontinuationOrderRequest.setReasonNonCoded("some");
Order mockDiscontinuationOrder = new Order();
mockDiscontinuationOrder.setOrderId(2);
mockDiscontinuationOrder.setAction(Order.Action.DISCONTINUE);
mockDiscontinuationOrder.setOrderer(discontinuationOrderRequest.getOrderer());
mockDiscontinuationOrder.setOrderReasonNonCoded(discontinuationOrderRequest.getReasonNonCoded());
mockDiscontinuationOrder.setPreviousOrder(mockRadiologyOrderToDiscontinue);
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.addParameter("discontinueOrder", "discontinueOrder");
MockHttpSession mockSession = new MockHttpSession();
mockRequest.setSession(mockSession);
when(radiologyOrderService.discontinueRadiologyOrder(mockRadiologyOrderToDiscontinue,
mockDiscontinuationOrder.getOrderer(), mockDiscontinuationOrder.getOrderReasonNonCoded()))
.thenThrow(new APIException("Cannot discontinue an order that is already stopped, expired or voided"));
BindingResult resultDiscontinueOrderRequest = mock(BindingResult.class);
assertThat(mockRadiologyOrderToDiscontinue.getAction(), is(Order.Action.NEW));
ModelAndView modelAndView = radiologyOrderFormController.discontinueRadiologyOrder(mockRequest,
mockRadiologyOrderToDiscontinue, discontinuationOrderRequest, resultDiscontinueOrderRequest);
verify(radiologyOrderService, times(1)).discontinueRadiologyOrder(mockRadiologyOrderToDiscontinue,
discontinuationOrderRequest.getOrderer(), discontinuationOrderRequest.getReasonNonCoded());
verifyNoMoreInteractions(radiologyOrderService);
assertNotNull(modelAndView);
assertThat(modelAndView.getViewName(), is(RadiologyOrderFormController.RADIOLOGY_ORDER_FORM_VIEW));
assertThat(modelAndView.getModelMap(), hasKey("order"));
Order order = (Order) modelAndView.getModelMap()
.get("order");
assertThat(order, is(mockRadiologyOrderToDiscontinue));
assertThat(modelAndView.getModelMap(), hasKey("radiologyOrder"));
RadiologyOrder radiologyOrder = (RadiologyOrder) modelAndView.getModelMap()
.get("radiologyOrder");
assertThat(radiologyOrder, is(mockRadiologyOrderToDiscontinue));
assertThat((String) mockSession.getAttribute(WebConstants.OPENMRS_ERROR_ATTR),
is("Cannot discontinue an order that is already stopped, expired or voided"));
}
@Test
public void shouldReturnFalseIfOrderIsNotARadiologyOrder() throws Exception {
// given
ModelAndView modelAndView = new ModelAndView(RadiologyOrderFormController.RADIOLOGY_ORDER_FORM_VIEW);
RadiologyOrder mockRadiologyOrderToDiscontinue = RadiologyTestData.getMockRadiologyOrder1();
String discontinueReason = "Wrong Procedure";
Order mockDiscontinuationOrder = new Order();
mockDiscontinuationOrder.setOrderId(2);
mockDiscontinuationOrder.setAction(Order.Action.DISCONTINUE);
mockDiscontinuationOrder.setOrderer(mockRadiologyOrderToDiscontinue.getOrderer());
mockDiscontinuationOrder.setOrderReasonNonCoded(discontinueReason);
mockDiscontinuationOrder.setPreviousOrder(mockRadiologyOrderToDiscontinue);
final boolean result = (Boolean) radiologyReportNeedsToBeCreatedMethod.invoke(radiologyOrderFormController,
new Object[] { modelAndView, mockDiscontinuationOrder });
assertFalse(result);
assertThat(modelAndView.getModelMap(), hasKey("radiologyReportNeedsToBeCreated"));
assertFalse((Boolean) modelAndView.getModelMap()
.get("radiologyReportNeedsToBeCreated"));
}
/**
* @see RadiologyOrderFormController#radiologyReportNeedsToBeCreated(ModelAndView,Order)
*/
@Test
public void shouldReturnFalseIfRadiologyOrderIsNotCompleted() throws Exception {
// given
ModelAndView modelAndView = new ModelAndView(RadiologyOrderFormController.RADIOLOGY_ORDER_FORM_VIEW);
RadiologyOrder incompleteRadiologyOrder = RadiologyTestData.getMockRadiologyOrder1();
incompleteRadiologyOrder.getStudy()
.setPerformedStatus(PerformedProcedureStepStatus.IN_PROGRESS);
final boolean result = (Boolean) radiologyReportNeedsToBeCreatedMethod.invoke(radiologyOrderFormController,
new Object[] { modelAndView, incompleteRadiologyOrder });
assertFalse(result);
assertThat(modelAndView.getModelMap(), hasKey("radiologyReportNeedsToBeCreated"));
assertFalse((Boolean) modelAndView.getModelMap()
.get("radiologyReportNeedsToBeCreated"));
}
@Test
public void shouldReturnFalseIfRadiologyOrderIsCompletedButHasAClaimedReport() throws Exception {
// given
ModelAndView modelAndView = new ModelAndView(RadiologyOrderFormController.RADIOLOGY_ORDER_FORM_VIEW);
RadiologyReport claimedReport = RadiologyTestData.getMockRadiologyReport1();
claimedReport.setStatus(RadiologyReportStatus.DRAFT);
RadiologyOrder completedRadiologyOrderWithClaimedReport = claimedReport.getRadiologyOrder();
completedRadiologyOrderWithClaimedReport.getStudy()
.setPerformedStatus(PerformedProcedureStepStatus.COMPLETED);
when(radiologyReportService.getActiveRadiologyReportByRadiologyOrder(completedRadiologyOrderWithClaimedReport))
.thenReturn(claimedReport);
final boolean result = (Boolean) radiologyReportNeedsToBeCreatedMethod.invoke(radiologyOrderFormController,
new Object[] { modelAndView, completedRadiologyOrderWithClaimedReport });
assertFalse(result);
assertThat(modelAndView.getModelMap(), hasKey("radiologyReportNeedsToBeCreated"));
assertFalse((Boolean) modelAndView.getModelMap()
.get("radiologyReportNeedsToBeCreated"));
}
@Test
public void shouldReturnFalseIfRadiologyOrderIsCompletedButHasACompletedReport() throws Exception {
// given
ModelAndView modelAndView = new ModelAndView(RadiologyOrderFormController.RADIOLOGY_ORDER_FORM_VIEW);
RadiologyReport completedReport = RadiologyTestData.getMockRadiologyReport1();
completedReport.setStatus(RadiologyReportStatus.COMPLETED);
RadiologyOrder completedRadiologyOrderWithCompletedReport = completedReport.getRadiologyOrder();
completedRadiologyOrderWithCompletedReport.getStudy()
.setPerformedStatus(PerformedProcedureStepStatus.COMPLETED);
when(radiologyReportService.getActiveRadiologyReportByRadiologyOrder(completedRadiologyOrderWithCompletedReport))
.thenReturn(completedReport);
final boolean result = (Boolean) radiologyReportNeedsToBeCreatedMethod.invoke(radiologyOrderFormController,
new Object[] { modelAndView, completedRadiologyOrderWithCompletedReport });
assertFalse(result);
assertThat(modelAndView.getModelMap(), hasKey("radiologyReportNeedsToBeCreated"));
assertFalse((Boolean) modelAndView.getModelMap()
.get("radiologyReportNeedsToBeCreated"));
}
@Test
public void shouldReturnTrueIfRadiologyOrderIsCompletedAndHasNoClaimedReport() throws Exception {
// given
ModelAndView modelAndView = new ModelAndView(RadiologyOrderFormController.RADIOLOGY_ORDER_FORM_VIEW);
RadiologyOrder completedRadiologyOrderWithNoClaimedReport = RadiologyTestData.getMockRadiologyOrder1();
completedRadiologyOrderWithNoClaimedReport.getStudy()
.setPerformedStatus(PerformedProcedureStepStatus.COMPLETED);
when(radiologyReportService.getActiveRadiologyReportByRadiologyOrder(completedRadiologyOrderWithNoClaimedReport))
.thenReturn(null);
final boolean result = (Boolean) radiologyReportNeedsToBeCreatedMethod.invoke(radiologyOrderFormController,
new Object[] { modelAndView, completedRadiologyOrderWithNoClaimedReport });
assertTrue(result);
assertThat(modelAndView.getModelMap(), hasKey("radiologyReportNeedsToBeCreated"));
assertTrue((Boolean) modelAndView.getModelMap()
.get("radiologyReportNeedsToBeCreated"));
}
}