package org.springframework.samples.mvc.convert; import static org.hamcrest.Matchers.startsWith; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import org.junit.Before; import org.junit.Test; import org.springframework.format.support.DefaultFormattingConversionService; import org.springframework.format.support.FormattingConversionService; import org.springframework.test.web.servlet.MockMvc; public class ConvertControllerTests { private MockMvc mockMvc; @Before public void setup() throws Exception { FormattingConversionService cs = new DefaultFormattingConversionService(); cs.addFormatterForFieldAnnotation(new MaskFormatAnnotationFormatterFactory()); this.mockMvc = standaloneSetup(new ConvertController()) .setConversionService(cs) .alwaysExpect(status().isOk()) .build(); } @Test public void primitive() throws Exception { this.mockMvc.perform(get("/convert/primitive").param("value", "3")) .andExpect(content().string("Converted primitive 3")); } @Test public void date() throws Exception { String timezone = getTimezone(2010, 7, 4); this.mockMvc.perform(get("/convert/date/2010-07-04")) .andExpect(content().string("Converted date Sun Jul 04 00:00:00 " + timezone + " 2010")); } @Test public void collection() throws Exception { this.mockMvc.perform(get("/convert/collection?values=1&values=2&values=3&values=4&values=5")) .andExpect(content().string("Converted collection [1, 2, 3, 4, 5]")); } @Test public void collection2() throws Exception { this.mockMvc.perform(get("/convert/collection?values=1,2,3,4,5")) .andExpect(content().string("Converted collection [1, 2, 3, 4, 5]")); } @Test public void formattedCollection() throws Exception { String timezone2010 = getTimezone(2010, 7, 4); String timezone2011 = getTimezone(2011, 7, 4); this.mockMvc.perform(get("/convert/formattedCollection?values=2010-07-04,2011-07-04")) .andExpect(content().string( "Converted formatted collection [Sun Jul 04 00:00:00 " + timezone2010 + " 2010, Mon Jul 04 00:00:00 " + timezone2011 + " 2011]")); } @Test public void valueOf() throws Exception { this.mockMvc.perform(get("/convert/value?value=123456789")) .andExpect(content().string(startsWith( "Converted value object org.springframework.samples.mvc.convert.SocialSecurityNumber"))); } @Test public void custom() throws Exception { this.mockMvc.perform(get("/convert/custom?value=123-45-6789")) .andExpect(content().string("Converted '123456789' with a custom converter")); } @Test public void beanPrimitive() throws Exception { this.mockMvc.perform(get("/convert/bean?primitive=3")) .andExpect(content().string("Converted JavaBean primitive=3")); } @Test public void beanDate() throws Exception { String timezone = getTimezone(2010, 7, 4); this.mockMvc.perform(get("/convert/bean?date=2010-07-04")) .andExpect(content().string("Converted JavaBean date=Sun Jul 04 00:00:00 " + timezone + " 2010")); } @Test public void beanMasked() throws Exception { this.mockMvc.perform(get("/convert/bean?masked=(205) 333-3333")) .andExpect(content().string("Converted JavaBean masked=2053333333")); } @Test public void beanCollection() throws Exception { this.mockMvc.perform(get("/convert/bean?list[0]=1&list[1]=2&list[2]=3")) .andExpect(content().string("Converted JavaBean list=[1, 2, 3]")); } @Test public void beanFormattedCollection() throws Exception { String timezone2010 = getTimezone(2010, 7, 4); String timezone2011 = getTimezone(2011, 7, 4); this.mockMvc.perform(get("/convert/bean?formattedList[0]=2010-07-04&formattedList[1]=2011-07-04")) .andExpect(content().string( "Converted JavaBean formattedList=[Sun Jul 04 00:00:00 " + timezone2010 + " 2010, Mon Jul 04 00:00:00 " + timezone2011 + " 2011]")); } @Test public void beanMap() throws Exception { this.mockMvc.perform(get("/convert/bean?map[0]=apple&map[1]=pear")) .andExpect(content().string("Converted JavaBean map={0=apple, 1=pear}")); } @Test public void beanNested() throws Exception { this.mockMvc.perform(get("/convert/bean?nested.foo=bar&nested.list[0].foo=baz&nested.map[key].list[0].foo=bip")) .andExpect(content().string( "Converted JavaBean nested=NestedBean foo=bar list=[NestedBean foo=baz] map={key=NestedBean list=[NestedBean foo=bip]}")); } private String getTimezone(int year, int month, int day) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month); calendar.set(Calendar.DAY_OF_MONTH, day); Date date = calendar.getTime(); TimeZone timezone = TimeZone.getDefault(); boolean inDaylight = timezone.inDaylightTime(date); return timezone.getDisplayName(inDaylight, TimeZone.SHORT); } }