/** * 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.modality.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.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; 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.api.context.Context; import org.openmrs.module.radiology.modality.RadiologyModality; import org.openmrs.module.radiology.modality.RadiologyModalityService; 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.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 RadiologyModalityResource}. */ @RunWith(PowerMockRunner.class) @PrepareForTest({ Context.class, RestUtil.class, LocaleUtility.class }) public class RadiologyModalityResourceTest { private static final String RADIOLOGY_MODALITY_UUID = "015f85fc-1316-45a3-848d-69ba192e64c4"; @Mock RadiologyModalityService radiologyModalityService; @Mock RequestContext requestContext; RadiologyModalityResource radiologyModalityResource = new RadiologyModalityResource(); RadiologyModality radiologyModality = new RadiologyModality(); Locale localeEn = new Locale("en"); @Before public void setUp() throws Exception { radiologyModality.setName("Exzelsior MAX9000"); radiologyModality.setAeTitle("CT01"); radiologyModality.setUuid(RADIOLOGY_MODALITY_UUID); 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(RadiologyModalityService.class)).thenReturn(radiologyModalityService); when(radiologyModalityService.getRadiologyModalityByUuid(RADIOLOGY_MODALITY_UUID)).thenReturn(radiologyModality); when(radiologyModalityService.saveRadiologyModality(radiologyModality)).thenReturn(radiologyModality); } @Test public void shouldReturnSupportedResourceVersion() throws Exception { assertThat(radiologyModalityResource.getResourceVersion(), is(RestConstants2_0.RESOURCE_VERSION)); } @Test public void shouldReturnDefaultRepresentationGivenInstanceOfDefaultrepresentation() throws Exception { DefaultRepresentation defaultRepresentation = new DefaultRepresentation(); DelegatingResourceDescription resourceDescription = radiologyModalityResource.getRepresentationDescription(defaultRepresentation); assertThat(resourceDescription.getProperties() .keySet(), contains("uuid", "display", "aeTitle", "name", "description", "retired")); } @Test public void shouldReturnFullRepresentationGivenInstanceOfFullrepresentation() throws Exception { FullRepresentation fullRepresentation = new FullRepresentation(); DelegatingResourceDescription resourceDescription = radiologyModalityResource.getRepresentationDescription(fullRepresentation); assertThat(resourceDescription.getProperties() .keySet(), contains("uuid", "display", "aeTitle", "name", "description", "retired", "auditInfo")); } @Test public void shouldReturnNullForRepresentationOtherThenDefaultOrFull() throws Exception { CustomRepresentation customRepresentation = new CustomRepresentation("some"); assertThat(radiologyModalityResource.getRepresentationDescription(customRepresentation), is(nullValue())); NamedRepresentation namedRepresentation = new NamedRepresentation("some"); radiologyModalityResource = new RadiologyModalityResource(); assertThat(radiologyModalityResource.getRepresentationDescription(namedRepresentation), is(nullValue())); RefRepresentation refRepresentation = new RefRepresentation(); radiologyModalityResource = new RadiologyModalityResource(); assertThat(radiologyModalityResource.getRepresentationDescription(refRepresentation), is(nullValue())); } @Test public void shouldReturnAeTitleOfGivenRadiologyModality() throws Exception { assertThat(radiologyModalityResource.getDisplayString(radiologyModality), is(radiologyModality.getAeTitle())); } @Test public void shouldReturnRadiologyModalityGivenItsUuid() throws Exception { assertThat(radiologyModalityResource.getByUniqueId(RADIOLOGY_MODALITY_UUID), is(radiologyModality)); verify(radiologyModalityService, times(1)).getRadiologyModalityByUuid(RADIOLOGY_MODALITY_UUID); verifyNoMoreInteractions(radiologyModalityService); } @Test public void shouldSaveGivenRadiologyModality() throws Exception { assertThat(radiologyModalityResource.save(radiologyModality), is(radiologyModality)); verify(radiologyModalityService, times(1)).saveRadiologyModality(radiologyModality); verifyNoMoreInteractions(radiologyModalityService); } @Test public void shouldRetireGivenRadiologyModality() throws Exception { radiologyModalityResource.delete(radiologyModality, "out of order", requestContext); verify(radiologyModalityService, times(1)).retireRadiologyModality(radiologyModality, "out of order"); verifyNoMoreInteractions(radiologyModalityService); } @Test(expected = ResourceDoesNotSupportOperationException.class) public void shouldThrowResourceDoesNotSupportOperationException() throws Exception { RequestContext requestContext = new RequestContext(); radiologyModalityResource.purge(radiologyModality, requestContext); } }