package de.panikco.pmdb.web.validation;
import org.apache.commons.lang.StringUtils;
import org.junit.Before;
import org.junit.Test;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import de.panikco.pmdb.model.Media;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public class MediaValidatorTest {
private MediaValidator validator;
private Media media;
private Errors errors;
@Before
public void setup() {
validator = new MediaValidator();
media = new Media();
media.setTitle("A valid title");
media.setComment("A valid comment.");
errors = new BindException(media, "media");
}
@Test
public void shouldSupportMediaClass() {
assertTrue(validator.supports(Media.class));
}
@Test
public void shouldFailOnEmptyTitle() {
media.setTitle(StringUtils.EMPTY);
validator.validate(media, errors);
assertThat(errors.getErrorCount(), is(1));
assertThat(errors.hasFieldErrors(MediaValidator.FIELD_TITLE), is(true));
assertThat((errors.getFieldError(MediaValidator.FIELD_TITLE)).getCode(), is(MediaValidator.ERROR_EMPTY));
}
@Test
public void shouldFailOnNullTitle() {
media.setTitle(null);
validator.validate(media, errors);
assertThat(errors.getErrorCount(), is(1));
assertThat(errors.hasFieldErrors(MediaValidator.FIELD_TITLE), is(true));
assertThat((errors.getFieldError(MediaValidator.FIELD_TITLE)).getCode(), is(MediaValidator.ERROR_EMPTY));
}
@Test
public void shouldFailOnTitleTooLong() {
media.setTitle(StringUtils.repeat("x", MediaValidator.TITLE_MAX_LENGTH + 1));
validator.validate(media, errors);
assertThat(errors.getErrorCount(), is(1));
assertThat(errors.hasFieldErrors(MediaValidator.FIELD_TITLE), is(true));
assertThat((errors.getFieldError(MediaValidator.FIELD_TITLE)).getCode(), is(MediaValidator.ERROR_TOO_LONG));
}
@Test
public void shouldFailOnAllWhitespaceTitle() {
media.setTitle(StringUtils.repeat(StringUtils.EMPTY, MediaValidator.TITLE_MAX_LENGTH));
validator.validate(media, errors);
assertThat(errors.getErrorCount(), is(1));
assertThat(errors.hasFieldErrors(MediaValidator.FIELD_TITLE), is(true));
assertThat((errors.getFieldError(MediaValidator.FIELD_TITLE)).getCode(), is(MediaValidator.ERROR_EMPTY));
}
@Test
public void shouldNotFailOnValidTitle() {
validator.validate(media, errors);
assertThat(errors.getErrorCount(), is(0));
}
}