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.LocalTime;
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 LocalTimeConverter}.
*/
public class LocalTimeConverterTest {
private ResourceBundle bundle;
private LocalTimeConverter converter;
private @Mock MutableRequest request;
private @Mock ServletContext context;
private @Mock JstlLocalization jstlLocalization;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
FilterChain chain = mock(FilterChain.class);
final RequestInfo webRequest = new RequestInfo(context, chain, request, null);
jstlLocalization = new JstlLocalization(webRequest);
converter = new LocalTimeConverter(jstlLocalization);
bundle = ResourceBundle.getBundle("messages");
}
@Test
public void shouldBeAbleToConvert() {
when(request.getAttribute("javax.servlet.jsp.jstl.fmt.locale.request"))
.thenReturn("pt_br");
assertThat(converter.convert("15:38", LocalTime.class, bundle),
is(equalTo(new LocalTime(15, 38))));
}
@Test
public void shouldBeAbleToConvertEmpty() {
assertThat(converter.convert("", LocalTime.class, bundle), is(nullValue()));
}
@Test
public void shouldBeAbleToConvertNull() {
assertThat(converter.convert(null, LocalTime.class, bundle), is(nullValue()));
}
@Test
public void shouldThrowExceptionWhenUnableToParse() {
when(request.getAttribute("javax.servlet.jsp.jstl.fmt.locale.request"))
.thenReturn("pt_br");
try {
converter.convert("xx:yy:ff", LocalTime.class, bundle);
} catch (ConversionError e) {
assertThat(e.getMessage(), is(equalTo("xx:yy:ff is not a valid time.")));
}
}
}