/** * 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.Matchers.is; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.openmrs.module.radiology.test.ValidatorAssertions.assertSingleGeneralError; import static org.openmrs.module.radiology.test.ValidatorAssertions.assertSingleNullErrorInField; import org.junit.Before; import org.junit.Test; import org.openmrs.test.BaseModuleContextSensitiveTest; import org.springframework.validation.BindException; import org.springframework.validation.Errors; import org.springframework.validation.ObjectError; import liquibase.util.StringUtils; /** * Tests {@link RadiologyModalityValidator}. */ public class RadiologyModalityValidatorTest extends BaseModuleContextSensitiveTest { private RadiologyModalityValidator radiologyModalityValidator; private RadiologyModality radiologyModality; private Errors errors; @Before public void setUp() { radiologyModalityValidator = new RadiologyModalityValidator(); radiologyModality = new RadiologyModality(); radiologyModality.setAeTitle("CT01"); radiologyModality.setName("Medical Corp Excelencium XT5980-Z"); errors = new BindException(radiologyModality, "radiologyModality"); } @Test public void shouldReturnFalseForOtherObjectTypes() throws Exception { assertFalse(radiologyModalityValidator.supports(Object.class)); } @Test public void shouldReturnTrueForRadiologyModalityObjects() throws Exception { assertTrue(radiologyModalityValidator.supports(RadiologyModality.class)); } @Test public void shouldFailValidationIfRadiologyModalityIsNull() throws Exception { radiologyModalityValidator.validate(null, errors); assertSingleGeneralError(errors); } @Test public void shouldFailValidationIfAeTitleIsNull() throws Exception { radiologyModality.setAeTitle(null); radiologyModalityValidator.validate(radiologyModality, errors); assertSingleNullErrorInField(errors, "aeTitle"); } @Test public void shouldFailValidationIfAeTitleIsEmpty() throws Exception { radiologyModality.setAeTitle(""); radiologyModalityValidator.validate(radiologyModality, errors); assertSingleNullErrorInField(errors, "aeTitle"); } @Test public void shouldFailValidationIfAeTitleIsWhitespacesOnly() throws Exception { radiologyModality.setAeTitle(" "); radiologyModalityValidator.validate(radiologyModality, errors); assertSingleNullErrorInField(errors, "aeTitle"); } @Test public void shouldFailValidationIfNameIsNull() throws Exception { radiologyModality.setName(null); radiologyModalityValidator.validate(radiologyModality, errors); assertSingleNullErrorInField(errors, "name"); } @Test public void shouldFailValidationIfNameIsEmpty() throws Exception { radiologyModality.setName(""); radiologyModalityValidator.validate(radiologyModality, errors); assertSingleNullErrorInField(errors, "name"); } @Test public void shouldFailValidationIfNameIsWhitespacesOnly() throws Exception { radiologyModality.setName(" "); radiologyModalityValidator.validate(radiologyModality, errors); assertSingleNullErrorInField(errors, "name"); } @Test public void shouldFailValidationIfRetireReasonIsNullOrEmptyIfRetireIsTrueAndSetRetiredToFalse() throws Exception { radiologyModality.setRetired(true); radiologyModalityValidator.validate(radiologyModality, errors); assertSingleNullErrorInField(errors, "retireReason"); } @Test public void shouldFailValidationIfFieldLengthsAreNotCorrect() throws Exception { radiologyModality.setAeTitle(StringUtils.repeat("1", 17)); radiologyModality.setName(StringUtils.repeat("1", 256)); radiologyModality.setDescription(StringUtils.repeat("1", 256)); radiologyModality.setRetireReason(StringUtils.repeat("1", 256)); radiologyModalityValidator.validate(radiologyModality, errors); assertTrue(errors.hasErrors()); ObjectError err = (errors.getAllErrors()).get(0); for (ObjectError error : errors.getAllErrors()) { assertThat(error.getCode(), is("error.exceededMaxLengthOfField")); } assertTrue(errors.hasFieldErrors("aeTitle")); assertTrue(errors.hasFieldErrors("name")); assertTrue(errors.hasFieldErrors("description")); assertTrue(errors.hasFieldErrors("retireReason")); } @Test public void shouldPassValidationIfAllFieldsAreCorrect() throws Exception { radiologyModalityValidator.validate(radiologyModality, errors); assertFalse(errors.hasErrors()); } }