package br.com.caelum.vraptor.converter.jodatime;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.ResourceBundle;
import javax.servlet.FilterChain;
import javax.servlet.ServletContext;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import br.com.caelum.vraptor.converter.ConversionError;
import br.com.caelum.vraptor.core.JstlLocalization;
import br.com.caelum.vraptor.core.RequestInfo;
import br.com.caelum.vraptor.http.MutableRequest;
/**
* Tests to {@link DateTimeConverter}.
*/
public class DateTimeConverterTest {
private DateTimeConverter converter;
private @Mock MutableRequest request;
private @Mock ServletContext context;
private @Mock ResourceBundle bundle;
private @Mock JstlLocalization jstlLocalization;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
bundle = ResourceBundle.getBundle("messages");
FilterChain chain = mock(FilterChain.class);
final RequestInfo webRequest = new RequestInfo(context, chain, request, null);
jstlLocalization = new JstlLocalization(webRequest);
converter = new DateTimeConverter(jstlLocalization);
}
@Test
public void shouldBeAbleToConvert() {
when(request.getAttribute("javax.servlet.jsp.jstl.fmt.locale.request"))
.thenReturn("pt_br");
assertThat(converter.convert("05/06/2010 3:38", DateTime.class, bundle),
is(equalTo(new DateTime(2010, 6, 5, 3, 38, 0, 0))));
}
@Test
public void shouldBeAbleToConvertEmpty() {
assertThat(converter.convert("", DateTime.class, bundle), is(nullValue()));
}
@Test
public void shouldBeAbleToConvertNull() {
assertThat(converter.convert(null, DateTime.class, bundle), is(nullValue()));
}
@Test
public void shouldThrowExceptionWhenUnableToParse() {
when(request.getAttribute("javax.servlet.jsp.jstl.fmt.locale.request"))
.thenReturn("pt_br");
try {
converter.convert("a,10/06/2008/a/b/c", DateTime.class, bundle);
} catch (ConversionError e) {
assertThat(e.getMessage(), is(equalTo("a,10/06/2008/a/b/c is not a valid datetime.")));
}
}
}