/**
* 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;
import static org.hamcrest.CoreMatchers.is;
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 java.util.List;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.openmrs.api.APIException;
import org.openmrs.api.context.Context;
import org.openmrs.test.BaseModuleContextSensitiveTest;
import org.springframework.beans.factory.annotation.Autowired;
/**
* Tests {@link RadiologyModalityService}.
*/
public class RadiologyModalityServiceComponentTest extends BaseModuleContextSensitiveTest {
private static final String TEST_DATASET =
"org/openmrs/module/radiology/include/RadiologyModalityServiceComponentTestDataset.xml";
private static final int EXISTING_RADIOLOGY_MODALITY_ID = 1;
private static final int NON_EXISTING_RADIOLOGY_MODALITY_ID = 999999;
private static final String EXISTING_RADIOLOGY_MODALITY_UUID = "015f85fc-1316-45a3-848d-69ba192e64c4";
private static final String NON_EXISTING_RADIOLOGY_MODALITY_UUID = "637d5011-49f5-4ce8-b4ce-47b37ff2cda2";
private static final int TOTAL_MODALITIES = 4;
private static final int TOTAL_MODALITIES_NON_RETIRED = 3;
@Autowired
private RadiologyModalityService radiologyModalityService;
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Before
public void setUp() throws Exception {
executeDataSet(TEST_DATASET);
}
@Test
public void shouldCreateANewRadiologyModality() throws Exception {
RadiologyModality radiologyModality = new RadiologyModality();
radiologyModality.setAeTitle("US10");
radiologyModality.setName("Exzelsior YTO234");
radiologyModalityService.saveRadiologyModality(radiologyModality);
assertNotNull(radiologyModality.getModalityId());
}
@Test
public void shouldUpdateAnExistingRadiologyModality() throws Exception {
RadiologyModality radiologyModality = new RadiologyModality();
radiologyModality.setAeTitle("US10");
radiologyModality.setName("Exzelsior YTO234");
radiologyModalityService.saveRadiologyModality(radiologyModality);
assertThat(radiologyModality.getAeTitle(), is("US10"));
assertNull(radiologyModality.getChangedBy());
assertNull(radiologyModality.getDateChanged());
Integer idBefore = radiologyModality.getModalityId();
radiologyModality.setAeTitle("US20");
radiologyModalityService.saveRadiologyModality(radiologyModality);
assertThat(radiologyModality.getModalityId(), is(idBefore));
assertThat(radiologyModality.getAeTitle(), is("US20"));
}
@Test
public void shouldFailToSaveRadiologyModalityIfGivenNull() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("radiologyModality cannot be null");
radiologyModalityService.saveRadiologyModality(null);
}
@Test
public void shouldFailToSaveRadiologyModalityIfGivenModalityIsNotValid() throws Exception {
RadiologyModality radiologyModality = new RadiologyModality();
expectedException.expect(APIException.class);
expectedException.expectMessage("failed to validate with reason:");
radiologyModalityService.saveRadiologyModality(radiologyModality);
radiologyModality.setAeTitle(" ");
expectedException.expect(APIException.class);
expectedException.expectMessage("failed to validate with reason:");
radiologyModalityService.saveRadiologyModality(radiologyModality);
}
@Test
public void shouldRetireAnExistingRadiologyModality() throws Exception {
RadiologyModality radiologyModality =
radiologyModalityService.getRadiologyModalityByUuid(EXISTING_RADIOLOGY_MODALITY_UUID);
assertThat(radiologyModality.getRetired(), is(false));
assertNull(radiologyModality.getRetiredBy());
assertNull(radiologyModality.getRetireReason());
assertNull(radiologyModality.getDateRetired());
String reason = "for fun";
radiologyModalityService.retireRadiologyModality(radiologyModality, reason);
assertThat(radiologyModality.getRetired(), is(true));
assertThat(radiologyModality.getRetireReason(), is(reason));
assertThat(radiologyModality.getRetiredBy(), is(Context.getAuthenticatedUser()));
assertNotNull(radiologyModality.getDateRetired());
}
@Test
public void shouldThrowIllegalArgumentExceptionIfGivenRadiologyModalityIsNull() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("radiologyModality cannot be null");
radiologyModalityService.retireRadiologyModality(null, "fo fun");
}
@Test
public void shouldThrowIllegalArgumentExceptionIfGivenReasonIsNullOrContainsOnlyWhitespaces() throws Exception {
RadiologyModality radiologyModality =
radiologyModalityService.getRadiologyModalityByUuid(EXISTING_RADIOLOGY_MODALITY_UUID);
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Reason for deletion cannot be empty");
radiologyModalityService.retireRadiologyModality(radiologyModality, null);
}
@Test
public void shouldReturnRadiologyModalityMatchingGivenModalityId() throws Exception {
RadiologyModality radiologyModality = radiologyModalityService.getRadiologyModality(EXISTING_RADIOLOGY_MODALITY_ID);
assertThat(radiologyModality.getId(), is(EXISTING_RADIOLOGY_MODALITY_ID));
}
@Test
public void shouldReturnNullIfNoMatchWasFoundForGivenModalityId() throws Exception {
assertNull(radiologyModalityService.getRadiologyModality(NON_EXISTING_RADIOLOGY_MODALITY_ID));
}
@Test
public void shouldFailToGetModalityByIdIfGivenNull() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("id cannot be null");
radiologyModalityService.getRadiologyModality(null);
}
@Test
public void shouldReturnRadiologyModalityMatchingGivenUuid() throws Exception {
RadiologyModality radiologyModality =
radiologyModalityService.getRadiologyModalityByUuid(EXISTING_RADIOLOGY_MODALITY_UUID);
assertThat(radiologyModality.getUuid(), is(EXISTING_RADIOLOGY_MODALITY_UUID));
}
@Test
public void shouldReturnNullIfNoMatchWasFoundForGivenModalityUuid() throws Exception {
assertNull(radiologyModalityService.getRadiologyModalityByUuid(NON_EXISTING_RADIOLOGY_MODALITY_UUID));
}
@Test
public void shouldFailToGetModalityByUuidIfGivenNull() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("uuid cannot be null");
radiologyModalityService.getRadiologyModalityByUuid(null);
}
@Test
public void shouldReturnRadiologyModalitiesIncludingRetiredOnesIfGivenTrue() throws Exception {
List<RadiologyModality> radiologyModalities = radiologyModalityService.getRadiologyModalities(true);
assertThat(radiologyModalities.size(), is(TOTAL_MODALITIES));
}
@Test
public void shouldReturnRadiologyModalitiesExcludingRetiredOnesIfGivenFalse() throws Exception {
List<RadiologyModality> radiologyModalities = radiologyModalityService.getRadiologyModalities(false);
assertThat(radiologyModalities.size(), is(TOTAL_MODALITIES_NON_RETIRED));
}
@Test
public void shouldReturnEmptyListIfNoMatchWasFound() throws Exception {
getConnection().createStatement()
.execute("DELETE FROM radiology_modality;");
getConnection().commit();
List<RadiologyModality> radiologyModalities = radiologyModalityService.getRadiologyModalities(true);
assertTrue(radiologyModalities.isEmpty());
}
}