/**
* 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.resource;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNull.nullValue;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.when;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.openmrs.Concept;
import org.openmrs.ConceptName;
import org.openmrs.api.context.Context;
import org.openmrs.module.radiology.order.RadiologyOrder;
import org.openmrs.module.radiology.order.RadiologyOrderService;
import org.openmrs.module.webservices.rest.web.RequestContext;
import org.openmrs.module.webservices.rest.web.RestUtil;
import org.openmrs.module.webservices.rest.web.representation.CustomRepresentation;
import org.openmrs.module.webservices.rest.web.representation.DefaultRepresentation;
import org.openmrs.module.webservices.rest.web.representation.FullRepresentation;
import org.openmrs.module.webservices.rest.web.representation.NamedRepresentation;
import org.openmrs.module.webservices.rest.web.representation.RefRepresentation;
import org.openmrs.module.webservices.rest.web.representation.Representation;
import org.openmrs.module.webservices.rest.web.resource.impl.DelegatingResourceDescription;
import org.openmrs.module.webservices.rest.web.response.ResourceDoesNotSupportOperationException;
import org.openmrs.module.webservices.rest.web.v1_0.resource.openmrs2_0.RestConstants2_0;
import org.openmrs.util.LocaleUtility;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
/**
* Tests {@link RadiologyOrderResource}.
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Context.class, RestUtil.class, LocaleUtility.class })
public class RadiologyOrderResourceTest {
private static final String RADIOLOGY_ORDER_UUID = "1bae735a-fca0-11e5-9e59-08002719a237";
@Mock
RadiologyOrderService radiologyOrderService;
RadiologyOrderResource radiologyOrderResource = new RadiologyOrderResource();
RadiologyOrder radiologyOrder = new RadiologyOrder();
Locale localeEn = new Locale("en");
@Before
public void setUp() throws Exception {
radiologyOrder.setUuid(RADIOLOGY_ORDER_UUID);
radiologyOrder.setAccessionNumber("1");
PowerMockito.mockStatic(RestUtil.class);
PowerMockito.mockStatic(LocaleUtility.class);
Set<Locale> locales = new HashSet<Locale>();
locales.add(localeEn);
when(LocaleUtility.getLocalesInOrder()).thenReturn(locales);
PowerMockito.mockStatic(Context.class);
when(Context.getService(RadiologyOrderService.class)).thenReturn(radiologyOrderService);
when(radiologyOrderService.getRadiologyOrderByUuid(RADIOLOGY_ORDER_UUID)).thenReturn(radiologyOrder);
}
@Test
public void shouldReturnDefaultRepresentationGivenInstanceOfDefaultrepresentation() throws Exception {
DefaultRepresentation defaultRepresentation = new DefaultRepresentation();
DelegatingResourceDescription resourceDescription =
radiologyOrderResource.getRepresentationDescription(defaultRepresentation);
assertThat(resourceDescription.getProperties()
.keySet(),
contains("uuid", "orderNumber", "accessionNumber", "patient", "concept", "action", "careSetting",
"previousOrder", "dateActivated", "dateStopped", "autoExpireDate", "encounter", "orderer", "orderReason",
"orderReasonNonCoded", "urgency", "scheduledDate", "instructions", "commentToFulfiller", "display"));
assertThat(resourceDescription.getProperties()
.get("patient")
.getRep(),
is(Representation.REF));
assertThat(resourceDescription.getProperties()
.get("concept")
.getRep(),
is(Representation.REF));
assertThat(resourceDescription.getProperties()
.get("careSetting")
.getRep(),
is(Representation.REF));
assertThat(resourceDescription.getProperties()
.get("previousOrder")
.getRep(),
is(Representation.REF));
assertThat(resourceDescription.getProperties()
.get("encounter")
.getRep(),
is(Representation.REF));
assertThat(resourceDescription.getProperties()
.get("orderer")
.getRep(),
is(Representation.REF));
assertThat(resourceDescription.getProperties()
.get("orderReason")
.getRep(),
is(Representation.REF));
}
@Test
public void shouldReturnFullRepresentationGivenInstanceOfFullrepresentation() throws Exception {
FullRepresentation fullRepresentation = new FullRepresentation();
DelegatingResourceDescription resourceDescription =
radiologyOrderResource.getRepresentationDescription(fullRepresentation);
assertThat(resourceDescription.getProperties()
.keySet(),
contains("uuid", "orderNumber", "accessionNumber", "patient", "concept", "action", "careSetting",
"previousOrder", "dateActivated", "dateStopped", "autoExpireDate", "encounter", "orderer", "orderReason",
"orderReasonNonCoded", "urgency", "scheduledDate", "instructions", "commentToFulfiller", "display",
"auditInfo"));
assertThat(resourceDescription.getProperties()
.get("patient")
.getRep(),
is(Representation.REF));
assertThat(resourceDescription.getProperties()
.get("concept")
.getRep(),
is(Representation.REF));
assertThat(resourceDescription.getProperties()
.get("careSetting")
.getRep(),
is(Representation.DEFAULT));
assertThat(resourceDescription.getProperties()
.get("previousOrder")
.getRep(),
is(Representation.REF));
assertThat(resourceDescription.getProperties()
.get("encounter")
.getRep(),
is(Representation.REF));
assertThat(resourceDescription.getProperties()
.get("orderer")
.getRep(),
is(Representation.REF));
assertThat(resourceDescription.getProperties()
.get("orderReason")
.getRep(),
is(Representation.REF));
}
@Test
public void shouldReturnNullForRepresentationOtherThenDefaultOrFull() throws Exception {
CustomRepresentation customRepresentation = new CustomRepresentation("some");
assertThat(radiologyOrderResource.getRepresentationDescription(customRepresentation), is(nullValue()));
NamedRepresentation namedRepresentation = new NamedRepresentation("some");
radiologyOrderResource = new RadiologyOrderResource();
assertThat(radiologyOrderResource.getRepresentationDescription(namedRepresentation), is(nullValue()));
RefRepresentation refRepresentation = new RefRepresentation();
radiologyOrderResource = new RadiologyOrderResource();
assertThat(radiologyOrderResource.getRepresentationDescription(refRepresentation), is(nullValue()));
}
/**
* @see RadiologyOrderResource#getResourceVersion()
*/
@Test
public void shouldReturnSupportedResourceVersion() throws Exception {
assertThat(radiologyOrderResource.getResourceVersion(), is(RestConstants2_0.RESOURCE_VERSION));
}
@Test
public void shouldReturnRadiologyOrderGivenItsUuid() throws Exception {
radiologyOrderResource.getByUniqueId(RADIOLOGY_ORDER_UUID);
}
@Test
public void shouldReturnAccessionNumberAndConceptNameOfGivenRadiologyOrder() throws Exception {
ConceptName conceptName = new ConceptName();
conceptName.setName("X-RAY, HEAD");
conceptName.setLocale(localeEn);
Concept concept = new Concept();
concept.addName(conceptName);
concept.setPreferredName(conceptName);
radiologyOrder.setConcept(concept);
assertThat(radiologyOrderResource.getDisplayString(radiologyOrder), is("1 - X-RAY, HEAD"));
}
@Test
public void shouldReturnNoConceptStringIfGivenRadiologyOrdersConceptIsNull() throws Exception {
assertThat(radiologyOrderResource.getDisplayString(radiologyOrder), is("1 - [No Concept]"));
}
@Test(expected = ResourceDoesNotSupportOperationException.class)
public void shouldFailToInstantiateNewDelegate() throws Exception {
radiologyOrderResource.newDelegate();
}
@Test(expected = ResourceDoesNotSupportOperationException.class)
public void shouldFailToSaveOrder() throws Exception {
radiologyOrderResource.save(radiologyOrder);
}
@Test(expected = ResourceDoesNotSupportOperationException.class)
public void shouldFailToDeleteOrder() throws Exception {
RequestContext requestContext = new RequestContext();
radiologyOrderResource.delete(radiologyOrder, "wrong order", requestContext);
}
@Test(expected = ResourceDoesNotSupportOperationException.class)
public void shouldFailToPurgeOrder() throws Exception {
RequestContext requestContext = new RequestContext();
radiologyOrderResource.purge(radiologyOrder, requestContext);
}
}