package org.openmrs.validator;
import org.junit.Assert;
import org.junit.Test;
import org.openmrs.scheduler.TaskDefinition;
import org.openmrs.test.Verifies;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
/**
* Tests methods on the {@link SchedulerFormValidator} class.
*/
public class SchedulerFormValidatorTest {
/**
* @see {@link SchedulerFormValidator#validate(Object,Errors)}
*/
@Test
@Verifies(value = "should fail validation if name is null or empty or whitespace", method = "validate(Object,Errors)")
public void validate_shouldFailValidationIfNameIsNullOrEmptyOrWhitespace() throws Exception {
TaskDefinition def = new TaskDefinition();
def.setName(null);
def.setRepeatInterval(3600000L);
def.setTaskClass("org.openmrs.scheduler.tasks.HelloWorldTask");
Errors errors = new BindException(def, "def");
new SchedulerFormValidator().validate(def, errors);
Assert.assertTrue(errors.hasFieldErrors("name"));
def.setName("");
errors = new BindException(def, "def");
new SchedulerFormValidator().validate(def, errors);
Assert.assertTrue(errors.hasFieldErrors("name"));
def.setName(" ");
errors = new BindException(def, "def");
new SchedulerFormValidator().validate(def, errors);
Assert.assertTrue(errors.hasFieldErrors("name"));
}
/**
* @see {@link SchedulerFormValidator#validate(Object,Errors)}
*/
@Test
@Verifies(value = "should fail validation if taskClass is empty or whitespace", method = "validate(Object,Errors)")
public void validate_shouldFailValidationIfTaskClassIsEmptyOrWhitespace() throws Exception {
TaskDefinition def = new TaskDefinition();
def.setName("Chores");
def.setRepeatInterval(3600000L);
def.setTaskClass("");
Errors errors = new BindException(def, "def");
new SchedulerFormValidator().validate(def, errors);
Assert.assertTrue(errors.hasFieldErrors("taskClass"));
def.setTaskClass(" ");
errors = new BindException(def, "def");
new SchedulerFormValidator().validate(def, errors);
Assert.assertTrue(errors.hasFieldErrors("taskClass"));
}
/**
* @see {@link SchedulerFormValidator#validate(Object,Errors)}
*/
@Test
@Verifies(value = "should fail validation if repeatInterval is null or empty or whitespace", method = "validate(Object,Errors)")
public void validate_shouldFailValidationIfRepeatIntervalIsNullOrEmptyOrWhitespace() throws Exception {
TaskDefinition def = new TaskDefinition();
def.setName("Chores");
def.setTaskClass("org.openmrs.scheduler.tasks.HelloWorldTask");
Errors errors = new BindException(def, "def");
new SchedulerFormValidator().validate(def, errors);
Assert.assertTrue(errors.hasFieldErrors("repeatInterval"));
def.setTaskClass(" ");
errors = new BindException(def, "def");
new SchedulerFormValidator().validate(def, errors);
Assert.assertTrue(errors.hasFieldErrors("repeatInterval"));
}
/**
* @see {@link SchedulerFormValidator#validate(Object,Errors)}
*/
@Test
@Verifies(value = "should fail validation if class is not instance of Task", method = "validate(Object,Errors)")
public void validate_shouldFailValidationIfClassIsNotInstanceOfTask() throws Exception {
TaskDefinition def = new TaskDefinition();
def.setName("Chores");
def.setRepeatInterval(3600000L);
def.setTaskClass("org.openmrs.Obs");
Errors errors = new BindException(def, "def");
new SchedulerFormValidator().validate(def, errors);
Assert.assertTrue(errors.hasFieldErrors("taskClass"));
Assert.assertEquals("Scheduler.taskForm.classDoesNotImplementTask", errors.getFieldError("taskClass").getCode());
}
/**
* @see {@link SchedulerFormValidator#validate(Object,Errors)}
*/
@Test
@Verifies(value = "should fail validation if class is not accessible", method = "validate(Object,Errors)")
public void validate_shouldFailValidationIfClassIsNotAccessible() throws Exception {
TaskDefinition def = new TaskDefinition();
def.setName("Chores");
def.setRepeatInterval(3600000L);
def.setTaskClass("???"); //TODO: Find a way to trigger an IllegalAccessException
Errors errors = new BindException(def, "def");
new SchedulerFormValidator().validate(def, errors);
Assert.assertTrue(errors.hasFieldErrors("taskClass"));
Assert.assertEquals("Scheduler.taskForm.classNotFoundException", errors.getFieldError("taskClass").getCode());
}
/**
* @see {@link SchedulerFormValidator#validate(Object,Errors)}
*/
@Test
@Verifies(value = "should fail validation if class cannot be instantiated", method = "validate(Object,Errors)")
public void validate_shouldFailValidationIfClassCannotBeInstantiated() throws Exception {
TaskDefinition def = new TaskDefinition();
def.setName("Chores");
def.setRepeatInterval(3600000L);
def.setTaskClass("org.openmrs.BaseOpenmrsData");
Errors errors = new BindException(def, "def");
new SchedulerFormValidator().validate(def, errors);
Assert.assertTrue(errors.hasFieldErrors("taskClass"));
Assert.assertEquals("Scheduler.taskForm.instantiationException", errors.getFieldError("taskClass").getCode());
}
/**
* @see {@link SchedulerFormValidator#validate(Object,Errors)}
*/
@Test
@Verifies(value = "sshould fail validation if class not found", method = "validate(Object,Errors)")
public void validate_shouldFailValidationIfClassNotFound() throws Exception {
TaskDefinition def = new TaskDefinition();
def.setName("Chores");
def.setRepeatInterval(3600000L);
def.setTaskClass("org.openmrs.ScaryRobot");
Errors errors = new BindException(def, "def");
new SchedulerFormValidator().validate(def, errors);
Assert.assertTrue(errors.hasFieldErrors("taskClass"));
Assert.assertEquals("Scheduler.taskForm.classNotFoundException", errors.getFieldError("taskClass").getCode());
}
/**
* @see {@link SchedulerFormValidator#validate(Object,Errors)}
*/
@Test
@Verifies(value = "should pass validation if all required fields have proper values", method = "validate(Object,Errors)")
public void validate_shouldPassValidationIfAllRequiredFieldsHaveProperValues() throws Exception {
TaskDefinition def = new TaskDefinition();
def.setName("Chores");
def.setRepeatInterval(3600000L);
def.setTaskClass("org.openmrs.scheduler.tasks.HelloWorldTask");
Errors errors = new BindException(def, "def");
new SchedulerFormValidator().validate(def, errors);
Assert.assertFalse(errors.hasErrors());
}
}